我正在尝试添加一条将所有sitemap.xml
个请求转移到我自定义请求处理程序的路由。
我尝试使用以下代码:
routes.Add(new Route("sitemap.xml", new Helpers.SiteMapRouteHandler()));
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
但是当我使用Url.Action()
建立链接时:
Url.Action("Index", new { controller = "About"})
当我尝试导航到XML文件时,我得到以下内容:
/sitemap.xml?action=Index&controller=About
我做错了什么?
解答:
我使用了这个解决方案:
答案 0 :(得分:3)
如果要路由到请求处理程序并执行操作
你可以添加这样的路线
routes.MapRoute(
"Sitemap",
"sitemap.xml",
new { controller = "Home", action = "SiteMap" }
);
如此处所述 - MVC: How to route /sitemap.xml to an ActionResult?并且它对我有用
更新:还要确保已设置<modules runAllManagedModulesForAllRequests="true">
。
答案 1 :(得分:0)
我不确定这是否能解决问题,但值得一试:
routes.Add(
new Route(
"{request}",
new RouteValueDictionary(new { id = "" }), // this might be the tricky part to change
new RouteValueDictionary(new { request = "sitemap.xml" }),
new Helpers.SiteMapRouteHandler()
));
答案 2 :(得分:0)
您必须向web.config文件添加处理程序。
<add name="SitemapFileHandler" path="sitemap.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
配置您的路线:
routes.RouteExistingFiles = true;