2014-01-27 2 views
4

라우팅이 제대로 작동하지 않습니다. 나는 다음과 같은 경로가 정의되어 있습니다ASP.NET MVC 라우팅이 작동하지 않습니다.

routes.MapRoute(
    name: "CategoryDetails", 
    url: "{seoName}", 
    defaults: new { controller = "Category", action = "Details" } 
); 

routes.MapRoute(
    name: "ContactUs", 
    url: "contact", 
    defaults: new { controller = "Home", action = "Contact" } 
); 

routes.MapRoute(
    name: "AboutUs", 
    url: "about", 
    defaults: new { controller = "Home", action = "About" } 
); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

내가 클릭 우리에 대한하거나 카테고리 컨트롤러의 세부 동작 방법에 저를 소요 한 후 우리에게 링크를 문의하는 경우.

이 내 우리에 대해 우리에게 연락 링크에 대한 마크 업입니다 : 카테고리 컨트롤러에 대한

@Html.ActionLink("About", "About", "Home") 
@Html.ActionLink("Contact", "Contact", "Home") 

내 세부 조치 방법 :

public ActionResult Details(string seoName) 
{ 
    CategoryViewModel model = categoryTask.Details(seoName); 

    return View(model); 
} 

내 경로 구성에 문제가 있습니까?

답변

25

경로를 가장 구체적인 것부터 덜 구체적으로 순서를 변경하십시오. 경로 접촉 약이 seoName 경로 전에 올 것이다 그런 식 :

routes.MapRoute(
     name: "ContactUs", 
     url: "contact", 
     defaults: new { controller = "Home", action = "Contact" } 
); 

routes.MapRoute(
     name: "AboutUs", 
     url: "about", 
     defaults: new { controller = "Home", action = "About" } 
); 

routes.MapRoute(
     name: "CategoryDetails", 
     url: "{seoName}", 
     defaults: new { controller = "Category", action = "Details" } 
); 

routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

원래 주문과 함께, URL을 ~/contact~/about은 항상 seoName 경로에 의해 처리 될 것이다. 다시 정렬하면 HomeController의 적절한 작업에 의해 처리되고 seoName 경로는 연락처와 경로가 일치하지 않은 URL과 일치합니다.

+0

덕분에 많은 사람의

HttpPost("/route")
를 넣고 있었어요! =) –

+2

나는 라우팅 순서를 알지 못했고이 대답은 내 하루를 절약합니다! +1 –

3

먼저 범주 세부 경로가 정의됩니다. 그것이 예를 들어 URL "http://server/AboutUs"(seoName은 "AboutUs"에 할당 됨)과 일치하는 이유입니다. 가장 구체적인 경로 (AboutUs, ContactUs)가 먼저 정의되어야합니다.

1

다음 문제가 발생합니다. 코멘트 해 주시거나 맨 아래에 올려주십시오.

routes.MapRoute(
    name: "CategoryDetails", 
    url: "{seoName}", 
    defaults: new { controller = "Category", action = "Details" } 
); 

처음에는 Defualt 경로가 작동하고 HomeControllers Indeax 조치를 취했습니다.

아무 링크 나 클릭하면. 라우팅 엔진은 첫 번째 엔진과 일치합니다. 경로 정의에 지정된 기본값이 사용됩니다.

다음 줄을 컨트롤러에 추가하고 봅니다. 클릭하면 연락처 또는 상세 URL이 여기에

http://arunkumar.com:62115/about

을 닮은 될 때

<h1>@ViewBag.ValueReceived</h1> 

이해하는 방법 당신이보기에 잘못된

public ActionResult Details(string seoName) 
    { 
     ViewBag.ValueReceived = seoName; 
     return View(); 
    } 

그리고가는 있었다 있도록 'about'은 seoName의 값으로 간주되며 잘못된 라우팅이 선택됩니다.

+0

올바른 결론과 OP가 찾고 있던 대답을 어떻게 디버그하여 얻을 수 있는지에 대한 좋은 설명. –

0
나는 비슷한 오류를 가졌다

, 내가 대신

HttpPost("route")
관련 문제