передать sitemap.xml http-запрос на обработчик маршрута в ASP.NET MVC - PullRequest
0 голосов
/ 07 февраля 2011

Я пытаюсь добавить маршрут, который будет передавать все 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

Что я делаю неправильно?

ОТВЕТ:

Я использовал это решение:

Указание точного пути для моего ASP.NET Http Handler

Ответы [ 3 ]

3 голосов
/ 17 сентября 2011

Если вы хотите направить и обработать вместо этого обработчик запроса

Вы можете добавить маршрут, подобный этому

routes.MapRoute(
        "Sitemap",
        "sitemap.xml",
        new { controller = "Home", action = "SiteMap" }
        );

, как указано здесь - MVC: Как маршрутизировать/sitemap.xml в ActionResult? , и он работал для меня

Обновление: Также убедитесь, что установлено <modules runAllManagedModulesForAllRequests="true">.

0 голосов
/ 23 декабря 2014

Вы должны добавить обработчик в файл 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

0 голосов
/ 07 февраля 2011

Я не уверен, что это решит проблему, но стоит попробовать:

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()
    )); 
...