[HttpGet, Route("products/{categoryName}")]
public IActionResult GetProductsByCategoryName(string categoryName) {
... code to retrieve products by category name
Выше один из способов сделать это, так что я предпочитаю, по крайней мере. Когда вы будете получать доступ к маршруту /products/nine-millimeter-handguns
, то в вашем действии переменная categoryName
будет иметь значение nine-millimeter-handguns
. Затем вы можете использовать это строковое значение для поиска всех продуктов этой категории и возврата их клиенту.
Другой способ сделать это в конфигурации глобального маршрута в Startup.cs. Если вы делаете это таким образом, вам не нужен атрибут [Route]
на методе действия:
public void Configure(IApplicationBuilder app) {
...
app.UseMvc(routes => {
routes.MapRoute(null, "products/{categoryName}", new {
controller = "Products", action = "GetProductsByCategoryName"
});
});
}
Я предпочитаю первый подход атрибута, поскольку он сохраняет маршруты ближе к контроллерам & действия, которые они отображают в. Но оба достигнут того же.
Для того, чтобы сделать ссылку на этот маршрут от точки зрения, вы бы пройти в categoryName
к методу HTML-помощник ActionLink:
@Html.ActionLink(item.Category, item.Category, new {
categoryName = "nine-millimeter-handguns"
})
Какой версии MVC вы используете? – danludwig
MVC Version 6.0 – PsychoCoder