Необязательные параметры в маршрутизации атрибутов 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.

Я хочу отправить по неправильным данным мои собственные исключения или сообщения об ошибках. Даже если в вызове отсутствуют значения. В этом случае я хочу иметь возможность принять исключение или установить значения по умолчанию с помощью моего кода.

Ответы на вопрос(3)

Ваш ответ на вопрос