2009-08-28 4 views
1

정확하게 경로 일치가 작동하는 방법과 해당 기능을 설명하는 어딘가에 기사가 있습니까?ASP.NET MVC 라우팅 캐치 올

/ 
/something 
/something/else 
/something/else/again 

모두 동일한 컨트롤러 액션에 매핑되는 URL이 매개 변수로 전달과 함께 : 있도록 예를 들어

, 어떻게, 모두를 잡을 수있는 경로를 작성합니다?

{*anything} 

위의 내용이 작동하지 않는 것 같습니다. 인수 내부에 슬래시를 처리 할 수 ​​있습니까?

답변

3

아래 코드는 거의 다 잡는다 ... 아마 냄새지만.

http://www.mysite.com/ 

예를 들어 여전히 default.aspx로 라우팅됩니다. 그러나 뭔가

http://www.mysite.com/some/page/that/doesnt/exist

등이 TestRouteHandler에 의해 체포된다. 라우터에 전달 된 RequestContext.RouteData 객체에 {* fields} 라우트 지정자가 있어야 원하는 작업을 수행 할 수 있습니다. 그러나이 시점에서 기본적으로 다시 쓰기 엔진을 구현하고 있습니다.

public class Routes 
{ 
    public static void Register(RouteCollection routes) 
    { 
     // setup legacy url routing 
     routes.Add(new Route("{*fields}",new TestRouteHandler())); 
    } 
} 

public class TestRouteHandler : IRouteHandler 
{ 
    public virtual IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     Page page = BuildManager.CreateInstanceFromVirtualPath("/default.aspx", typeof(Page)) as Page; 
     return page; 
    } 

} 

양자 택일로, 당신은 같은 항목을 잡을 것

routes.Add(new Route("dave/{*fields}",new TestRouteHandler())); 

같은 최상위 경로를 지정할 수 있습니다.

http://www.mysite.com/dave 
http://www.mysite.com/dave/test/parameter 
http://www.mysite.com/dave/virtually/infinite/number/of/items/goes/here 
+0

나는 이것을하고 있었지만 잘 작동하지 않았다. 이제는 다음과 같다. 그 금요일의 순간들 중의 하나 였을거야! 해명 해줘서 고마워. –

1

나는이 방법을 사용하여 과거에 그 처리해야했다 :

public ActionResult Something(string anything) 
{ 
    var anythings = anything.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 

그리고이 경로 :

"something/{*anything}" 

그리고 모든 것을 잡으려고. 이

public class HomeController : Controller 
{ 
    public ActionResult Show(string anything) 
    { 
     Response.Write(anything); 
     return null; 
    } 

그런 다음 기본 경로 전에 ...

routes.MapRoute("anything", "{*anything}", new {controller="Home",action="Show"}); 
+0

루트 또는 "무언가"로 시작하지 않는 항목은 무엇입니까? –

+0

updated 내 대답 – mxmissile