0

블로그 사이트에서 MVC3으로 업그레이드 중입니다.ASP.NET MVC3에 물리적으로 존재하지 않는 axd를 매핑하는 방법

난의 Web.config이있다 : 나는 URL에서 직접 rss.axd에 액세스하는 경우

<add name="RssHandler" verb="*" path="rss.axd" type="Blog.Web.RSSHandler, Blog.Web"/> 

그래서, 그것은 작동 :

http://mydomain/rss.axd 

가 지금은에 http://mydomain/RSS를 사용하려면 rss.axd지도, 그래서 rss.axd가 아니므로의 Global.asax에, 나는

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute("RSS-View", "RSS", "~/rss.axd", false); 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    ... 
} 

을 시도하지만 난 404 오류가 발생했습니다 웹 사이트 폴더에있는 실제 파일. 과거

는, 내가이 일을 UrlRewrite를 사용하고는 다음과 같이 작동합니다

<LookFor>~/RSS<LookFor> 
<SendTo>~/rss.axd</SendTo> 

그래서, MVC3이 "다시 쓰기"를 할 어쨌든이 아니라 "경로"? 리디렉션을 사용하고 싶지 않습니다.

답변

1

http 처리기로 라우팅 할 수있는 기본 제공 지원이 없습니다.

하나의 가능성은 RSSHandler의 인스턴스를 반환하는 사용자 정의 경로 처리기 (IRouteHandler) 작성하는 것입니다 :

public class RssRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     return new Blog.Web.RSSHandler(); 
    } 
} 

을 마지막으로이 경로를 등록 할 수있다 : 이제 우리가

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.Add("RSS-View", new Route("rss", new RssRouteHandler())); 

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

을 더 이상 가상 rss.axd 주소를 통과하지 않습니다. 당신의 좋은 아이디어에 대한

<add name="RssHandler" verb="*" path="rss" type="Blog.Web.RSSHandler, Blog.Web"/> 
+0

감사 : 요청이 /rss하려고 할 때 우리는 Web.config의에서 다음을 가진 것처럼 우리가 직접 우리의 사용자 지정 경로 처리기를 통해이 요청을 제공하고 있습니다. 하지만 마침내 나는 (이것이 좋은 연습 방법인지는 모르겠다.) 나는 web.config/system.web에 이것을 추가한다. ' –

관련 문제