【问题标题】:Multiple controller types were found that match the URL MVC 5.2找到多个与 URL MVC 5.2 匹配的控制器类型
【发布时间】:2015-05-07 23:02:13
【问题描述】:

点击网址Shop/Checkout时出现此错误

请求找到了以下匹配的控制器类型:

  • shopmvc.Controllers.HomeController
  • shopmvc.Controllers.ProductsController

我的HomeController.cs

[Route("{action=index}")]
public class HomeController : Controller
{
    [Route("Shop/Checkout")]
    public ActionResult Checkout()
    {
    }
}

我的 ProductsController.cs

[RoutePrefix("Shop")]
[Route("{action=index}")]
public class ProductsController : Controller
{
    [HttpGet]
    [Route("{brand}/{category}/{subcategory?}/{page:int?}")]
    public ActionResult Index(string brand, string category, string subcategory, int? page, SortOptions currentSort = SortOptions.SinceDesc)
    {
    }

    [HttpGet]
    [ActionName("Details")]
    [Route("{brand}/{category}/{productid}")]
    public ActionResult Details(int productid)
    {
    }
}

我知道两条路线都有Shop,但我不知道如何解决这个问题。这是我共享布局中的剃须刀代码:

<a href="@Url.Action("checkout", "Home" )">

【问题讨论】:

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


    【解决方案1】:

    问题是“结帐”作为brand 的参数在您的ProductController 路由中是有效的。具有属性路由的路由没有内在顺序,因此您必须更加小心,以确保只有一个路由可以真正匹配 URL。在您的情况下,您可以简单地执行以下操作:

    [Route("{brand:regex((?!Checkout))}/...")]
    

    【讨论】:

    • 谢谢,这个路由限制有帮助!
    猜你喜欢
    • 2018-07-22
    • 2016-07-27
    • 2020-02-05
    • 1970-01-01
    • 2023-04-06
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多