Dot-Net
如何在 ASP.NET MVC 中擁有同名的文件夾和控制器?
我有一個名為 Downloads 的 MVC 控制器。http://mysite/下載
我還想將一個物理文件放在一個名為http://mysite/Downloads/MyFile.zip的物理文件夾中。
如果我只是創建一個文件夾,我會在瀏覽到http://mysite/Downloads時得到 403 。(很可能是因為目錄瀏覽被禁用)但我希望 MVC 控制器啟動。
我怎麼做?
如果您瀏覽到
http://mysite/Downloads/{ACTION}它將觸發您的控制器操作。在您的範例中唯一不起作用的是
/Downloads不採取任何行動。您可以重新編寫此 URL 以將您重定向到您的預設操作。此外,您需要讓路由處理程序忽略您的下載文件。您可以在 global.asax 文件中添加一行以忽略所有 zip 文件或其他適合的忽略模式。
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假設存在 a
MarketsController,如果我們請求Markets,它將被路由到Markets/Index。如果我們請求
/Markets/audio.mp3,我們將獲得 mp3 文件,如果我們請求Markets/AnythingElse,則將應用正常路由。