2014-02-21 4 views
4

Я работаю над приложением ASP.NET MVC. В этом приложении мне нужно динамически генерировать карту сайта, когда она запрашивается. Я знаю, как настроить маршруты в целом. Однако я не уверен, могу ли я создать маршрут для определенного файла. В настоящее время, я следующий в RouteConfig.cs:Статические файловые маршруты в ASP.NET MVC

routes.MapRoute(
    name: "Sitemap", 
    url: "resources/sitemap.xml", 
    defaults: new { controller = "Site", action = "Sitemap" } 
); 

В моей SiteController я следующее:

public ActionResult Sitemap() 
{ 
    // I will build my sitemap.xml file here and return it. 
} 

Когда я вхожу /resources/sitmap.xml в адресную строку браузера, я заметил, что действие Sitemap() никогда не срабатывает. Возможно ли даже в ASP.NET MVC настроить маршрут для определенного файла? Если да, то как?

Спасибо,

ответ

5

Так что вы должны сделать в несколько шагов -

Шаг 1 - Карта расширения XML, чтобы заботиться о с помощью .Net для маршрутизации Добавить следующий раздел в Web.config под <system.webServer> -

<handlers> 
    <add name="HtmlFileHandler" path="*.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 

Шаг 2 - Определите ваши маршруты и переопределить запросы, которые соответствуют существующему файлу.

routes.RouteExistingFiles = true; 

routes.MapRoute(
    name: "Sitemap", 
    url: "{site}.xml", 
    defaults: new { controller = "Site", action = "Sitemap", site = UrlParameter.Optional } 
); 

затем шаг 3 - Попробуйте получить доступ /SiteMap.xml, вы получите действие удар контроллера.

+0

Я нашел, что для маршрутизации в/sitemap для несуществующего файла sitemap.xml мне не нужно было добавлять строку 'routes.RouteExistingFiles = true;', а также установить атрибут 'HtmlFileHandler'' path к 'sitemap.xml', а не к * .xml. Не уверен, что это будет большим преимуществом, но просто подумал, что я упоминаю об этом. Спасибо за ответ, хотя, v полезно. – Ted

Смежные вопросы