Необязательные параметры в маршрутизации атрибутов Web Api
Я хочу обработать POST следующего API-вызова:
/v1/location/deviceid/appid
Дополнительный параметр поступает от пост-тела.
Это все прекрасно работает для меня. Теперь я хочу расширить свой код, допустив, чтобы значения «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
- даже если вызов отправить тело.
Наконец я установил все 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.
Я хочу отправить по неправильным данным мои собственные исключения или сообщения об ошибках. Даже если в вызове отсутствуют значения. В этом случае я хочу иметь возможность принять исключение или установить значения по умолчанию с помощью моего кода.