2015-05-07 3 views
0

Я получаю эту ошибку, когда я попал в URL Shop/Checkoutнесколько типов контроллеров были найдены, которые соответствуют URL MVC 5.2

Запрос нашел следующие типы соответствия контроллера:

  • 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

Проблема в том, что «заказ» действует в качестве параметра для brand в ваших ProductController маршрутов. Нет никакого внутреннего порядка маршрутов с маршрутизацией атрибутов, поэтому вам нужно быть более осторожным, чтобы убедиться, что только один маршрут действительно может соответствовать URL. В вашем случае здесь вы можете просто сделать что-то вроде:

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

Спасибо, это ограничение маршрута помогает! –