我有一个名为Downloads的MVC控制器。 HTTP:// mysite的/下载
我还想将一个物理文件放在一个名为的物理文件夹中 HTTP://mysite/Downloads/MyFile.zip。
如果我只是创建一个文件夹,我在浏览时会得到403 HTTP:// mysite的/下载。 (很可能因为目录浏览被禁用) 但是我希望MVC控制器能够启动。
我怎么做?
我有一个名为Downloads的MVC控制器。 HTTP:// mysite的/下载
我还想将一个物理文件放在一个名为的物理文件夹中 HTTP://mysite/Downloads/MyFile.zip。
如果我只是创建一个文件夹,我在浏览时会得到403 HTTP:// mysite的/下载。 (很可能因为目录浏览被禁用) 但是我希望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
,正常路由将适用。