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