首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >routes.MapRoute问题

routes.MapRoute问题
EN

Stack Overflow用户
提问于 2014-01-09 22:04:40
回答 1查看 636关注 0票数 0

我收到以下错误

发现与名为“User”的控制器匹配的多个类型。如果服务此请求的路由(“Mobile/{控制器}/{action}/{id}”)没有指定名称空间来搜索与请求匹配的控制器,则可能发生这种情况。如果是这样的话,通过调用带有“名称空间”参数的'MapRoute‘方法的重载来注册这个路由。

我在我的Global.asax.cs中创建了以下内容

代码语言:javascript
复制
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" }
);

根据我所读到的,添加这些应该可以解决我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-09 23:05:04

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

当您指定名称空间时,如果在该名称空间中找不到控制器,MVC就会求助于它的默认行为。默认行为是,任何名为UserController的公共控制器类都是匹配的。

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

代码语言:javascript
复制
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错误。在这种情况下,您将确定您没有设置正确的命名空间。

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21032203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档