【问题标题】:Odd routing outcome with ASP.NET MVC 4?ASP.NET MVC 4 的奇怪路由结果?
【发布时间】:2013-06-21 22:00:15
【问题描述】:

我遇到了最奇怪的路由问题,我无法弄清楚如何避免。我们的应用程序中有两个区域,它们都有一个员工控制器。所以我们有这两个有效的 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}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用“命名空间”参数的“MapRoute”方法的重载来注册此路由。

“员工”的请求找到了以下匹配的控制器: blah.Admin.Areas.Employees.Controllers.EmployeesController blah.Areas.Reports.Controllers.EmployeesController

当该区域从路线中丢失时,它甚至会尝试匹配这两条路线中的任何一条,这对我来说没有意义吗?路由明明在路由中包含区域名称,不是可选的吗?

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

blah.com/Tools/ErrorLog

如果我输入 blah.com/ErrorLog 它实际上会运行那个 Tools/ErrorLog 控制器,但它会在试图找到视图时崩溃。有什么想法吗?

【问题讨论】:

  • 看起来没有人知道如何解决这个问题。据我所知,这似乎是 ASP.NET MVC 4 中的默认行为,但我不知道为什么这完全有用!

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


【解决方案1】:

您需要使用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 }
  );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2013-08-15
    • 2017-09-01
    • 2016-09-25
    • 1970-01-01
    • 2017-03-25
    • 2014-05-25
    相关资源
    最近更新 更多