ASP.NET MVC中的静态文件路由

时间:2014-02-21 12:10:01

标签: asp.net-mvc

我正在开发一个ASP.NET MVC应用程序。在这个应用程序中,我需要在请求时动态生成站点地图。我知道如何配置路由。但是,我不确定是否可以为特定文件创建路由。目前,我在RouteConfig.cs中有以下内容:

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中为特定文件设置路由吗?如果是这样,怎么样?

谢谢,

1 个答案:

答案 0 :(得分:5)

所以你需要做一些步骤 -

第1步 - 映射xml扩展名以由.Net进行路由处理 在<system.webServer> -

下的Web.config中添加以下部分
<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,您将触及Controller操作。