2008-11-01 4 views
11

여러 가지 형식으로 제공 될 수있는 뉴스 목록에 대해 MVC 경로를 만들고 싶습니다."파일 확장명"을 사용하는 ASP.NET MVC 경로

  • 뉴스 -> (X) HTML
  • news.rss -> RSS
  • news.atom -> ATOM

이 가능이 작업을 수행하는 것입니다 (더 일반적인 "선택적인 확장 "한 가지 길로 내 계획된 디자인의 여러 곳에서 상황이 생겼다. 아니면이 같은 두 개의 경로를해야 할 : 나는 같은 추가 쌍을 지원하는 방법을 만들어

routes.MapRoute("News", 
       "news(.{format})?", 
       new { controller = "News", action = "Browse" }); 

답변

12

:

routes.MapRoute("News-ImplicitFormat", 
       "news", 
       new { controller = "News", action = "Browse", format = "" }); 

routes.MapRoute("News-ExplicitFormat", 
       "news.{format}" 
       new { controller = "News", action = "Browse" }); 

같은 라우팅 시스템 지원 뭔가를하는 것이 유용 할 것 같아 이것은 다음과 같습니다 :

public static void MapRouteWithOptionalFormat(this RouteCollection routes, 
               string name, 
               string url, 
               object defaults) 
{ 
    Route implicitRoute = routes.MapRoute(name + "-ImplicitFormat", 
              url, 
              defaults); 
    implicitRoute.Defaults.Add("format", string.Empty); 

    Route explicitRoute = routes.MapRoute(name + "-ExplicitFormat", 
              url + ".{format}", 
              defaults); 
} 
+1

명시 적으로 지정할 수 있기 때문에 암시 적 및 명시 적 경로의 순서를 바꿨지 만 잘 작동합니다. – ern

0

정상 경로를 사용하여이 작업을 수행 할 수 있습니다.

업데이트 : 실제로, 나는 질문을 잘못 읽었습니다. 다른 대답은 올바른 일입니다. 또는 맞춤 경로를 만드십시오. 향후 옵션으로 가능한 옵션 세그먼트에 대한 아이디어를 검토 중입니다.

+0

Phil, 내가 뭘 찾고있을거야? . 포함 (".")? 이 전략을 간단히 요약 해 주시겠습니까? 어쨌든 멋진 작품입니다. 감사! –

+0

필 Haack MVC 질문에 downvoted지고, 나는 너무 자주 발생하지 않습니다 내기 : – fearofawhackplanet

+2

나는 이것이 2-3 년 된 것을 알고 있지만 지금이 doable입니까? 나는/post/15' = html,'/ post/15.json' = json api-data를 가질 수 있는지 궁금해했다. – Alxandr