我正在博客网站上工作,将其升级到MVC3。
我在web.config中有这个:
<add name="RssHandler" verb="*" path="rss.axd" type="Blog.Web.RSSHandler, Blog.Web"/>
因此,如果我直接从url访问rss.axd,它可以工作:
http://mydomain/rss.axd
现在我想使用http://mydomain/RSS
来映射rss.axd,所以在global.asax中,我试过了
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("RSS-View", "RSS", "~/rss.axd", false);
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
...
}
但是我收到了404错误,因为rss.axd不是网站文件夹中存在的物理文件。
过去,我使用UrlRewrite执行此操作,它的工作方式如下:
<LookFor>~/RSS<LookFor>
<SendTo>~/rss.axd</SendTo>
那么,在MVC3中是否还有“ReWrite”,而不是“Route”?我不想使用重定向。
答案 0 :(得分:1)
没有可用于路由到http处理程序的内置支持。
一种可能性是编写一个自定义路由处理程序(IRouteHandler
),它将返回RSSHandler
的实例:
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
地址了。当向/rss
发出请求时,我们通过自定义路由处理程序直接提供此请求,就像我们在web.config中有以下内容一样:
<add name="RssHandler" verb="*" path="rss" type="Blog.Web.RSSHandler, Blog.Web"/>