Дополнительные параметры Web API
У меня есть контроллер со следующей подписью:
[Route("products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}")]
public IHttpActionResult Get(string apc, string xpc, int? sku)
{ ... }
Я вызываю этот метод со следующими URI:
- ~ / api / продукты / фильтр?apc=AA&xpc=BB
- ~ / api / продукты / фильтр?sku=7199123
Первый URI работает без проблем. У второго есть странный побочный эффект. Хотя значения по умолчанию для apc и xpc должны быть равны нулю, если они не указаны, параметры на самом деле являются их именами. Я могу преодолеть это, добавив дополнительные логика:
apc = (apc == "apc") ? null : apc;
xpc = (xpc == "xpc") ? null : xpc;
Это похоже на хак, и было бы проблематично, если бы передаваемое значение было когда-либо равно имени параметра.
Есть ли способ определить маршрут без этого побочного эффекта?
2 ответов:
Я понял это. Я использовал плохой пример, который я нашел в прошлом, как сопоставить строку запроса с параметрами метода.
В случае, если кому-то еще это нужно, чтобы иметь необязательные параметры в строке запроса, такие как:
- ~ / api / продукты / фильтр?apc=AA&xpc=BB
- ~ / api / продукты / фильтр?sku=7199123
Вы бы использовали:
[Route("products/filter/{apc?}/{xpc?}/{sku?}")] public IHttpActionResult Get(string apc = null, string xpc = null, int? sku = null) { ... }Кажется странным определять значения по умолчанию для параметров метода, когда эти типы уже имеют значение по умолчанию.
Sku-это int, по умолчанию строка "sku"не может быть задана. Пожалуйста, проверьте необязательные параметры URI и значения по умолчанию
Comments