2014-02-21 150 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扩展的净路由 添加以下下的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.xml文件/ sitemap,我不需要添加'routes.RouteExistingFiles = true;'行,也可以设置'HtmlFileHandler''路径'属性到'sitemap.xml'而不是* .xml。不知道这是否会有很大的优势,但只是认为我提到它。谢谢你的回答,v有用。 – Ted