找到了与URL MVC 5.2

时间:2015-05-07 13:41:48

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

点击网址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" )">

1 个答案:

答案 0 :(得分:1)

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

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