Дополнительные параметры 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;


Это похоже на хак, и было бы проблематично, если бы передаваемое значение было когда-либо равно имени параметра.



Есть ли способ определить маршрут без этого побочного эффекта?
497   2  

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

    Ничего не найдено.