routes.MapRoute问题

时间:2014-01-09 22:04:41

标签: asp.net-mvc

我收到以下错误

  

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

我在Global.asax.cs

中创建了以下内容
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Mobile",
"Mobile/{controller}/{action}/{id}",
 new { controller = "User", action = "Login", id = UrlParameter.Optional },
 new string[] { "YourApp.Controllers.Mobile" }
);

routes.MapRoute(
"Other",
"Other/{controller}/{action}/{id}",
new { controller = "User", action = "Login", id = UrlParameter.Optional },
new string[] { "YourApp.Controllers.Other" }
);

从我读过的内容中,添加这些内容应该可以解决我的问题。

1 个答案:

答案 0 :(得分:1)

您确定UserController类在命名空间YourApp.Controllers.Mobile内吗? 该错误还应该提到所有已找到的具有完整名称空间的匹配控制器。哪些是那些以及它们具有哪些命名空间?

当您指定命名空间时,如果在该命名空间中找不到控制器,则MVC将采用其默认行为。默认行为是名为UserController的任何公共控制器类都匹配。

为了帮助诊断错误,您可以通过以这种方式添加路由来禁用此回退行为:

Route myRoute = routes.MapRoute(
    "Mobile",
    "Mobile/{controller}/{action}/{id}",
     new { controller = "User", action = "Login", id = UrlParameter.Optional },
     new [] { "YourApp.Controllers.Mobile" }
);
myRoute.DataTokens["UseNamespaceFallback"] = false;

禁用回退后,MVC将只查看指定的命名空间。如果控制器不在该命名空间中,那么您将收到404错误。在这种情况下,您将确定您没有设置正确的命名空间。

希望这有帮助!