Использование тире в запросе URL в ASP.NET Core - PullRequest
0 голосов
/ 27 октября 2018

Можем ли мы использовать тире (-) в шаблоне Route в ASP.NET Core?

// GET: api/customers/5/orders?active-orders=true
[Route("customers/{customer-id}/orders")]
public IActionResult GetCustomerOrders(int customerId, bool activeOrders)
{
    .
    .
    .
}

(приведенный выше код не работает)

1 Ответ

0 голосов
/ 28 октября 2018

Параметры маршрута обычно напрямую отображаются на имя переменной действия , поэтому [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 анонса .

...