将sitemap.xml http请求传递给ASP.NET MVC中的路由处理程序

时间:2011-02-07 13:32:12

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing

我正在尝试添加一条将所有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

我做错了什么?

解答:

我使用了这个解决方案:

    

Specifying exact path for my ASP.NET Http Handler

3 个答案:

答案 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;

在这里阅读更多内容: http://weblogs.asp.net/jongalloway//asp-net-mvc-routing-intercepting-file-requests-like-index-html-and-what-it-teaches-about-how-routing-works