【问题标题】:Multiple controller types were found that match the URL. ASP.Net MVC找到多个与 URL 匹配的控制器类型。 ASP.Net MVC
【发布时间】:2016-07-27 03:00:06
【问题描述】:

这是关于使用路由属性定义路由的。我有两个控制器

第一控制器

[AllowAnonymous]
[Route("Member/Login")]
public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}

第二控制器

[Route("{CategoryURL}/{Keywords}")]
public ActionResult BrowseProducts(string CategoryURL, string Keywords)
{

}

如果尝试访问 URL xyz.net/Member/Login,则会出现以下错误

找到多个与 URL 匹配的控制器类型。如果多个控制器上的属性路由与请求的 URL 匹配,就会发生这种情况。 该请求找到了以下匹配的控制器类型: XYZ.Controllers.AccountController XYZ.Controllers.CoursesController

我知道我有第二个控制器的可选参数,因此当我尝试访问 xyz.net/Member/Login 时,它会找到两个要执行的操作方法并获取多控制器错误。

我的问题是,如何在不更改当前路由的情况下解决此问题。我尝试了 Order, Precedence,但没有成功。

【问题讨论】:

  • 您在 Global.asax / App_Start 中定义的路线是什么? MVC 5 主要支持属性路由。如果你正在使用它,你需要在你的配置中注册属性路由。

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

正如我上面评论的那样,根据您选择的标签,您使用的是 MVC 4,但 MVC 5 支持属性路由。如果您真的使用 MVC 5,那么以下参考资料对您非常有帮助:

https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/

最重要的是,当你注册你的路由时,你必须激活属性路由 -->

public static void RegisterRoutes(RouteCollection routes)
{ 
    routes.MapMvcAttributeRoutes();
}

并确保您没有定义任何其他可能与您选择使用的属性相冲突的路由。

否则,您选择的属性应该可以正常工作。非常简单的应用程序。

【讨论】:

  • 我已经提到了 routes.MapMvcAttributeRoutes();在我的路线配置中。如果我删除 [Route("{CategoryURL}/{Keywords}")],一切正常。因此,配置路由没有问题。
【解决方案2】:

Web api 约束也可能适用于您要完成的任务

http://www.asp.net/web-api/overview/web-api-routing-and-actions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2020-02-05
    • 2018-07-22
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多