ASP.NET MVC 4的奇怪路由结果?

时间:2013-06-21 22:00:16

标签: asp.net-mvc-4 routing asp.net-mvc-routing

我有最奇怪的路由问题,我无法解决如何避免。我们的应用程序中有两个区域,它们都有一个Employees控制器。所以我们有两个有效的网址:

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 }
    );
}

现在一切都按预期工作了,但是如果有人输入了错误的网址,就会出现问题,如下所示:

blah.com/Employees

然后生成以下错误:

找到了与名为“Employees”的控制器匹配的多个类型。如果为此请求提供服务的路由('{controller} / {action} / {id}')未指定名称空间来搜索与请求匹配的控制器,则会发生这种情况。如果是这种情况,请通过调用带有“名称空间”参数的“MapRoute”方法的重载来注册此路由。

对'Employees'的请求找到了以下匹配的控制器: blah.Admin.Areas.Employees.Controllers.EmployeesController blah.Areas.Reports.Controllers.EmployeesController

对我来说,当路线中缺少该区域时,它甚至会尝试匹配这两条路线中的任何一条路线是没有意义的吗?路线显然包含路线中的区域名称,而不是可选的?

我还注意到,如果我有另一个有效的控制器用于另一条路线,请说出这个:

blah.com/Tools/ErrorLog

如果我输入blah.com/ErrorLog,它实际上会运行Tools / ErrorLog控制器,但它会试图查找视图。有什么想法在这里?

1 个答案:

答案 0 :(得分:0)

您需要使用NameSpaces in your MapRoute method

public override void RegisterArea(AreaRegistrationContext context)
{
  context.MapRoute(
    "Employees_default",
    "Employees/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new [] { Mysolution.Myproject.Employees }
  );
}

public override void RegisterArea(AreaRegistrationContext context)
{
  context.MapRoute(
    "Reports_default",
    "Reports/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new [] { Mysolution.Myproject.Reports }
  );
}