Параметры маршрута обычно напрямую отображаются на имя переменной действия , поэтому [Route("customers/{customerId}/orders")]
должно работать, так как это имя вашей переменной (int customerId
).
Вы не нужны штрихи, часть в фигурных скобках {}
никогда не будет отображаться как часть сгенерированного URL, она всегда будет заменена содержимым, которое вы передаете из браузера, или переменными, которые вы передаете в URLгенератор.
customers/{customerId}/orders
всегда будет customers/1/orders
, если для customerId
установлено значение 1, поэтому нет смысла пытаться принудительно установить значение {customer-id}
.
Однако вы можете попробовать public
[Route("customers/{customer-id}/orders")]
IActionResult GetCustomerOrders([FromRoute(Name = "customer-id")]int customerId, bool activeOrders)
, чтобы связать customerId
с нетрадиционным названием маршрута, если хотите.Но я настоятельно рекомендую против этого, так как он просто добавляет ненужный код, который имеет абсолютно нулевой эффект для ваших сгенерированных URL.
Выше генерируется (и анализируется) точнотот же URL-адрес, что и
[Route("customers/{customerId}/orders")]
IActionResult GetCustomerOrders(int customerId, bool activeOrders)
и намного более читаемый код.
Для части запроса, как вы выяснили в комментариях, имеет смысл добавлять тире через [FromQuery(Name = "active-orders")] bool activeOrders
, поскольку это действительно влияет на сгенерированный URL.
Новое в ASP.NET Core 2.2
В ASP.NET Core 2.2 вы получите новую опцию, чтобы «убить» ваши маршруты (поддерживается только при использовании нового Диспетчера маршрутов вместоМаршрутизатор Mvc по умолчанию).
Маршрут blog\{article:slugify}
(при использовании с Url.Action(new { article = "MyTestArticle" })
) генерирует blog\my-test-article
в качестве URL.
Может также использоваться в маршрутах по умолчанию:
routes.MapRoute(
name: "default",
template: "{controller=Home:slugify}/{action=Index:slugify}/{id?}");
Дополнительные сведения см. В ASP.NET Core 2.2-preview 3 анонса .