2012-11-16 6 views
0

ASP.NET MVC v3에서 역행 처리를 수행하는 방법이 있습니까?ASP.NET MVC 대체 라우팅

"www.mysite.com/faq/Index"라는 URL이 주어지면 "FAQ", "Index"액션에 대한 경로가 있는지 확인하고 싶습니다.

routes.MapRoute("Default","{controller}/{action}/{id}", 
      new { id = UrlParameter.Optional }); 

해결할 수없는 경우 일반적으로 404 오류가 발생합니다. 대신,이 경로를 사용하도록 싶습니다

routes.MapRoute("Content", "Content/{*contentPath}", 
      new { controller = "Content", action = "RenderPageByURL" }); 

을이 실패 할 경우, 그것은 반환해야 404

나는 사용자 지정 오류 처리기를 만들 수 있습니다 생각하고 있었다, 그러나 이것은 미봉책 보인다. 어디에서 시작해야하는지에 대한 아이디어가 있습니까? 아니면 진정으로 나쁜 생각입니까? (TM) 비즈니스로 돌아가서 올바른 길을 사용하도록 알려야합니다. 감사.

을 수정하십시오. 명확하게하기 위해, 나는 그것이 단순한 URL 일치를 통한 경로와 일치 하는지를 보려고하지 않고있다. 나는 경로가 성공하고 적절한 컨트롤러를 찾을 지 알기에 라우팅 메커니즘을 충분히 지적하고 싶습니다.

답변

1

나는 동료의 제안과 아래의 링크를 기반으로 내 질문에 대답 해요 (감사, 조쉬!) :

http://stephenwalther.com/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx

을 기본적으로,이 경로에서 사용자 정의 제한 조건을 추가 .

routes.MapRoute("Content", "{*contentPath}", 
     new { controller = "Content", action = "RenderPageByURL" }, 
     new { matchController = new ContentRouteConstraint() }); 

routes.MapRoute("Default","{controller}/{action}/{id}", 
     new { id = UrlParameter.Optional }); 

ContentRouteConstraint는() IRouteConstraint를 구현하고 기존 노선 컨트롤러 중 하나와 일치하지 않는 경우에만 일치 방법에 true를 돌려줍니다. Match 메소드가 ContentRouteConstraint()에서 실패하면 다음 경로로 내려갑니다.

좋은 점은 URL을 생성하려고 할 때이 경로를 무시할 수 있다는 것입니다.이 인스턴스에서는이 경로를 원합니다.

1

Globasl.asax.cs의 Default 아래에 Content 경로를 정의하십시오.

routes.MapRoute("Default","{controller}/{action}/{id}", 
      new { id = UrlParameter.Optional }); 

routes.MapRoute("Content", "Content/{*contentPath}", 
      new { controller = "Content", action = "RenderPageByURL" }); 
+0

그렇다면 www.mysite.com/faq/Index에 FaqController가 없으면 ContentController로 이동하겠습니까? 나는 그것이 404 오류를 던질 것이라고 생각했다. – bryanjonker

+0

라우팅 작동 방법 수신 요청이 실패한 경우 들어오는 요청이 첫 번째 경로와 일치하면 끝까지 두 번째 요청과 일치합니다. 위의 예에서 두 경로가 요청과 일치하지 않으면 404가 발생합니다. – VJAI

+0

테스트 프로젝트에서 시도했습니다. 기본 경로가 자동으로/content/faq 경로를 점유하고 404 오류가 발생했습니다. 그것은 두 번째 길을 찾지 못했습니다. – bryanjonker