如何在ASP.NET MVC中使用相同名称的文件夹和控制器?
-
08-07-2019 - |
题
我有一个名为Downloads的MVC控制器。 http:// mysite / Downloads
我还想将物理文件放在名为 http://mysite/Downloads/MyFile.zip的物理文件夹中。 。
如果我只是创建一个文件夹,那么在浏览 http:// mysite / Downloads 时会得到403。 (很可能因为目录浏览被禁用) 但我希望MVC控制器能够启动。
我该怎么做?
解决方案
如果您浏览 http:// mysite / Downloads / {ACTION}
,它将触发您的控制器操作。
在您的示例中唯一不起作用的是 / Downloads
,没有任何操作。您可以重新编写此URL以将您重定向到默认操作。
此外,您需要让routehandler忽略您的下载文件。您可以在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
假设存在 MarketsController
,如果我们请求 Markets
,它将被路由到 Markets / Index
。
如果我们要求 /Markets/audio.mp3
,我们会收到mp3文件,如果我们要求 Markets / AnythingElse
,则会应用正常路由。
不隶属于 StackOverflow