2014-02-21 190 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