2

У меня есть действие API:Атрибут маршрутизации распознают параметры строки опциональный запроса

[HttpGet, Route("{id}/overview/")] 
public async Task<HttpResponseMessage> Overview(string id, DateTime from, DateTime? to) 
{ 
... 
} 

Как вы заметили, to является необязательные параметры, но когда я делаю запрос:

«/ апи/крем/3d7dd454c00b/overview? From = 2016-09-04T18: 00: 00.000Z

У меня ошибка 404. Если я удалю to из параметров: public async Task<HttpResponseMessage> Overview(string id, DateTime from)

тогда все работает нормально. Как заставить его работать с параметрами to?

+1

В вашем примере 'to' не является обязательным. Вам нужно будет изменить его на [необязательный аргумент] (https://msdn.microsoft.com/en-us/library/dd264739.aspx#Anchor_2). т.е. «Обзор (идентификатор строки, DateTime from, DateTime? to = null)». Вот и все. – Nkosi

ответ

4

Используйте атрибут FromUri и сделать для опционального



    [HttpGet, Route("{id}/overview/")] 
    public async Task Overview(string id, [FromUri]DateTime from, [FromUri]DateTime? to = null) 
    { 
    ... 
    } 

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

Затем вы получаете свой 404, так как никакой метод не соответствует вашему вызову, это связано с тем, что DateTime имеет значение NULL, но не является необязательным.

Надеюсь, что это поможет

+0

Да, 'to = null' исправлена ​​проблема, спасибо за ответ. – user348173

 Смежные вопросы

  • Нет связанных вопросов^_^