我有一个最奇怪的路由问题,我无法弄清楚如何避免。我们的应用程序中有两个区域,它们都有一个员工控制器。所以我们有这两个有效的 URL:
blah.com/Employees/Employees blah.com/Reports/Employees
路由注册如下:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Employees_default",
"Employees/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Reports_default",
"Reports/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
现在一切都按预期进行,但是如果有人输入错误的 URL,就会出现问题,例如:
blah.com/Employees
然后生成以下错误:
找到了与名为“Employees”的控制器匹配的多种类型。如果服务此请求的路由 ('{controller}/{action}/{id}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。
'Employees' 的请求找到了以下匹配的控制器:blah.Admin.Areas.Employees.Controllers.EmployeesController blah.Areas.Reports.Controllers.EmployeesController
当路线中缺少该区域时,它甚至会尝试匹配这两条路线中的任何一条,这对我来说没有意义吗?路由明明在路由中包含区域名称,不是可选的吗?
我还注意到,如果我有另一个用于另一条路线的有效控制器,请说这个:
blah.com/Tools/ErrorLog
如果我输入 blah.com/ErrorLog 它实际上会运行那个 Tools/ErrorLog 控制器,但它会在试图找到视图时崩溃。有什么想法吗?