Как иметь папку и контроллер с одинаковым именем в ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/1437386

Вопрос

У меня есть контроллер MVC, который называется «Загрузки». http: // mysite / Downloads

Я также хочу поместить физический файл в физическую папку с именем http: //mysite/Downloads/MyFile.zip .

Если я просто создаю папку, я получаю 403 при переходе по адресу http: // mysite / Downloads . (Скорее всего из-за просмотра каталогов отключен) Но я хочу, чтобы вместо этого включился контроллер 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

Если предположить существование MarketsController , если мы сделаем запрос на Markets , он будет перенаправлен в Markets / Index .

Если бы мы запросили /Markets/audio.mp3 , мы бы получили файл mp3, и если бы мы запросили Markets / AnythingElse , будет применяться обычная маршрутизация.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top