我收到以下错误
发现与名为“User”的控制器匹配的多个类型。如果服务此请求的路由(“Mobile/{控制器}/{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" }
);根据我所读到的,添加这些应该可以解决我的问题。
发布于 2014-01-09 23:05:04
您确定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错误。在这种情况下,您将确定您没有设置正确的命名空间。
希望这能有所帮助!
https://stackoverflow.com/questions/21032203
复制相似问题