Я хочу обработать POST следующего API-вызова:
/v1/location/deviceid/appid
Дополнительные параметры поступают из Post-Body.
У меня все работает нормально. Теперь я хочу расширить свой код, разрешив "deviceid" и / или "appid" и / или BodyData иметь значение null:
/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