2013-09-23 3 views
2

Я видел ответы на подобные вопросы, но ни одна из них не работает для этой ситуации.MVC Маршрут, противоречащий существующим причинам папки 404

У меня есть приложение MVC4 с зарегистрированной областью, называемой «Настройки», с одним «Управляющим» -контроллером. У меня также есть папка в моем веб-проекта с источниками под названием «Настройки», поэтому структура папок выглядит следующим образом:

+ WebProjectFolder 
    + Areas 
      +Settings 
       +Controllers 
        ManageController.cs 
       + SettingsAreaRegistration.cs 
       ... 
    + Settings 
      + SomeClasses.cs 

ManageController очень просто:

public class ManageController : Controller 
{ 
    public ActionResult Index() 
    { 
     return Content("WORKS FINE!"); 
    } 
} 

регистрация Район также очень просто:

public class SettingsAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Settings"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.Routes.IgnoreRoute("Settings/{*pathinfo}"); 
     context.Routes.RouteExistingFiles = false; 

     context.MapRoute(
      "Settings_default", 
      "Settings/{controller}/{action}/{id}", 
      new {area = context.AreaName, controller="Manage", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

проблема:

http://mysite/settings - 404 
http://mysite/settings/Manage - 404 
http://mysite/settings/Manage/Index - 404 

В случае удаления строки «context.Routes.IgnoreRoute» («Настройки/{* pathinfo}»); Результаты следующие:

http://mysite/settings - 404 
http://mysite/settings/Manage - WORKS FINE! 
http://mysite/settings/Manage/Index - WORKS FINE! 

только Если удалить/переименовать существующую папку «Настройки», затем результаты правильны. Аналогичная ситуация с контроллером называется так же, как и папка.

Как сделать MVC игнорировать существующую папку и всегда отдавать приоритет контроллеру?

ответ

5

Я думаю, вы хотели установить RouteExistingFiles на true.

context.Routes.RouteExistingFiles = true; 

Выдержка:

верно, если маршрутизация ASP.NET обрабатывает все запросы, даже те, которые соответствуют существующему файлу; в противном случае - false. Значение по умолчанию неверно.

+0

Установка RouteExistingFiles = true - это «ядерная опция» для маршрутизации. Это означает, что мы направляем все соответствующие запросы, независимо от того, существует ли файл. [См. Этот вопрос] (http://forums.asp.net/t/1263849.aspx) –

Смежные вопросы