Как создать папку и контроллер с таким же именем в ASP.NET MVC?
У меня есть MVC-контроллер под названием Downloads. http://mysite/Downloads
Я также хочу поместить физический файл в физическую папку http://mysite/Downloads/MyFile.zip.
Если я просто создаю папку, я получаю 403 при просмотре http://mysite/Downloads.
(Скорее всего, из-за просмотра каталогов отключено)
Но я хочу, чтобы вместо этого MVC-контроллер нажал.
Как это сделать?
Ответы
Ответ 1
Если вы перейдете к http://mysite/Downloads/{ACTION}
, он запустит действие ваших контроллеров.
Единственное, что не будет работать в вашем примере, это /Downloads
без каких-либо действий. Вы можете переписать этот URL, чтобы перенаправить вас к действию по умолчанию.
Кроме того, вам нужно будет игнорировать ваши файлы загрузки. Вы можете добавить строку в свой файл global.asax, чтобы игнорировать все файлы zip или какой-либо другой шаблон игнорирования, который подходит.
routes.Ignore("{resource}.zip");
Ответ 2
Начиная с .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
, применили бы нормальную маршрутизацию.