Обнаружено несколько типов контроллеров, соответствующих URL-адресу MVC 5.2.

Я получаю эту ошибку, когда нажимаю URL-адрес 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" )">

person JP Hellemons    schedule 07.05.2015    source источник


Ответы (1)


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

[Route("{brand:regex((?!Checkout))}/...")]
person Chris Pratt    schedule 07.05.2015
comment
Спасибо, это ограничение маршрута помогает! - person JP Hellemons; 08.05.2015