Я хочу обробити POST наступного виклику API:
/v1/location/deviceid/appid
Додаткові параметри надходять від Post-Body.
Для мене все це чудово працює. Тепер я хочу розширити свій код, дозволивши значення "deviceid" та / або "appid" та / або BodyData нульовим:
/v1/location/deviceid
/v1/location/appid
/v1/location/
Ці 3 URL-адреси повинні відповідати тим же шляхом.
Мій перший підхід (потрібні BodyData):
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody] location_fromuser BodyData)
{
return repository.AddNewLocation(deviceid, appid, BodyData);
}
Це не працює і повертає помилку компіляції:
"необов’язкові параметри повинні бути в кінці"
Наступна спроба:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
Тепер моя функція AddNewLocation () отримує завжди BodyData=null
- навіть якщо виклик надсилає Body.
Нарешті я встановив усі 3 параметри необов’язково:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
Не працює:
Необов’язковий параметр
BodyData
не підтримуєтьсяFormatterParameterBinding
.
Чому я хочу рішення з необов’язковими параметрами? Мій контролер обробляє лише "додавання нового розташування" через POST.
Я хочу надіслати на неправильних даних свої власні винятки або повідомлення про помилки. Навіть якщо у виклику відсутні значення. У цьому випадку я хочу мати можливість прийняти виключення або встановити за замовчуванням мій код.
?
всередині шаблону маршруту - це те, що я шукав. +1