ASP.NET MVC маршрутизация: с строкой запросов к одному действию, без к другому - PullRequest
1 голос
/ 13 сентября 2011

Мне нужны следующие маршруты:

example.com/products
переходит на страницу с категориями товаров (например, автомобили, грузовики, автобусы, велосипеды)
контроллер = Products, действие = Categories()

example.com/products?a=1&b=2
идет к индексу всех продуктов в определенной категории (например, Ford, Honda, Chevy)
контроллер = Products, действие = Index(string a, string b)

Маршруты различаются только в строке запроса, и кажется, что MVC игнорирует что-либо после "?". Так что, конечно, только одно правило когда-нибудь получит удар - первое.

Как мне различить два?

Редактировать: указано иначе, я хочу два маршрута. Можно ли использовать строку запроса в маршруте или MVC действительно игнорирует ее? Есть ли способ взломать его или использовать какую-то собственную схему маршрутизации, так же, как я могу выполнить пользовательское связывание и пользовательскую проверку?

1 Ответ

1 голос
/ 13 сентября 2011

Введите параметры.ASP.NET MVC позволяет вам создавать «красивые» URL-адреса, и это именно то, что вы должны сделать здесь:

Сначала сопоставления маршрутов:

routes.MapRoute(
    "SpecificProducts",
    "products/{a}/{b}",
    new { controller = "products", action = "Categories" }
    );

routes.MapRoute(
    "ProductsIndex",
    "products".
    new { controller = "products", action = "Index" }
    );

Затем действия контроллера

public ActionResult Index()
{
}

public ActionResult Categories(string a, string b) //parameters must match route values
{
}

Это позволит вам использовать удобный для поиска URL, и вам не придется беспокоиться о параметрах строки запроса.

...