Веб-API 2: может ли параметр метода контроллера [FromBody] быть необязательным, если метод контроллера перегружен [HttpPost] и [HttpGet]? - PullRequest
0 голосов
/ 20 февраля 2020

Иногда я хочу опубликовать объект запроса в Web Api 2, но большую часть времени я просто хочу использовать параметры URI для фильтрации данных, возвращаемых методом контроллера. Я попробовал это:

[HttpGet][HttpPost]
public ResultVM GetResult(
    [FromBody] QueryObjectVM query,
    ,[FromUri] int? custid = null,
    ,[FromUri] int? orderid = null
)

Это прекрасно работает, пока я размещаю с объектом запроса в теле. Я могу также включить или не включить параметры Uri также успешно. Тем не менее, объект запроса не удается привязать данные на Get, потому что HttpGet не имеет тела.

Я попытался сделать объект запроса необязательным, но это не удалось как на Get и Post. Привязка данных Web API не похожа на необязательное нулевое присваивание:

[FromBody] QueryObjectVM query = null

Если ответ таков, я должен иметь отдельный метод контроллера для Post и Get, будет ли Web API 2 обрабатывать HttpGet, вызывающий HttpPost, а затем возвращать данные успешно? Я не могу всегда вызывать этот метод с помощью почтовых звонков.

1 Ответ

0 голосов
/ 21 февраля 2020

Пока вот что я придумал, но я бы лучше выяснил, как заставить QueryObjectVM работать в качестве необязательного параметра с HttpGet

[Route("GetResult")]
[HttpGet]
public ResultVM GetResult(
        [FromUri] int? custid = null
        , [FromUri] int? orderid = null
)
{   return this.GetResult(query: null, custid: custid, orderid: orderid);
}

[Route("GetResult")]
[HttpPost]
public ResultVM GetResult(
        [FromBody] QueryObjectVM query
        , [FromUri] int? custid = null
        , [FromUri] int? orderid = null
)
{  
    // Add optional Uri parameters to query object, query, and return the new result
}
...