【发布时间】:2025-12-11 21:35:01
【问题描述】:
我确实看到了类似问题的答案,但没有一个适用于这种情况。
我有 MVC4 应用程序,其注册区域称为“设置”,带有一个“管理”控制器。我的 Web 项目中还有一个文件夹,其中包含名为“设置”的源,因此文件夹结构如下:
+ 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("Settings/{*pathinfo}");" 结果如下:
http://mysite/settings - 404
http://mysite/settings/Manage - WORKS FINE!
http://mysite/settings/Manage/Index - WORKS FINE!
仅当我删除/重命名现有文件夹“设置”时,结果才是正确的。 与文件夹命名相同的控制器的类似情况。
如何让MVC忽略已有文件夹,始终优先处理Controller?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing