我有一個名爲Downloads的MVC控制器。 http://mysite/Downloads如何在ASP.NET MVC中擁有相同名稱的文件夾和控制器?
我也想把一個物理文件放在一個名爲http://mysite/Downloads/MyFile.zip的物理文件夾中。
如果我只是創建一個文件夾,當瀏覽到http://mysite/Downloads時,我會得到一個403。 (很可能是因爲目錄瀏覽被禁用) 但是我希望MVC控制器可以踢入。
我該怎麼做?
我有一個名爲Downloads的MVC控制器。 http://mysite/Downloads如何在ASP.NET MVC中擁有相同名稱的文件夾和控制器?
我也想把一個物理文件放在一個名爲http://mysite/Downloads/MyFile.zip的物理文件夾中。
如果我只是創建一個文件夾,當瀏覽到http://mysite/Downloads時,我會得到一個403。 (很可能是因爲目錄瀏覽被禁用) 但是我希望MVC控制器可以踢入。
我該怎麼做?
如果您瀏覽到http://mysite/Downloads/{ACTION}
它將觸發您的控制器操作。
在你的例子中唯一不起作用的是/Downloads
沒有動作。您可以重新編寫此URL以將您重定向到默認操作。
此外,您需要讓路由處理程序忽略您的下載文件。您可以在global.asax文件中添加一行以忽略所有壓縮文件或其他適合的忽略模式。
routes.Ignore("{resource}.zip");
由於.NET 3.5,你可以航線現有文件:
public static void RegisterRoutes(RouteCollection routes) {
routes.RouteExistingFiles = true;
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
}
因此,假設我們對網站的根文件夾名爲Markets
包含audio.mp3
文件:
\Markets
\Markets\audio.mp3
假設MarketsController
的存在,如果我們提出Markets
的請求,它將被路由到Markets/Index
。
如果我們要求/Markets/audio.mp3
我們會得到mp3文件,如果我們要求Markets/AnythingElse
,正常路由將適用。