0

У меня есть действие контроллера, как это:Почему я не могу привязать этот параметр Web Api к строке запроса?

public async Task<HttpResponseMessage> Put(
     [FromUri] ResourceSpec resource, 
     //ValidationType? validationType, 
     CreateResourceRequest body) 

public enum ValidationType 
{ 
    name = 1, 
} 

Он прекрасно работает - объект ресурса и объект тела (классы) заполняется из параметров маршрутизации URL и тело запроса соответственно.

Я хочу, чтобы у меня возникли проблемы с привязкой дополнительного параметра validationType к параметру строки запроса в запросе PUT.

Когда я раскомментирую строку ValidationType (и тип проверки - Enum) и отправлю URL-адрес с параметром «validationType = name query», я получаю ошибки при маршрутизации к действию, например. 405 Метод не допускается (Allow: GET) (И да, у меня есть метод GET на этом контроллере, который не принимают параметр ValidationType.)

И да, я попытался установить параметр как опция в коде маршрутизации:

defaults: new { controller = "Resource", validationType = RouteParameter.Optional } 

и попытался изменения в

[FromUri] ValidationType? validationType, 

. Пожалуйста, скажите мне, почему это не работает!

Обновление: ОК Я получил его до маршрут, но не привязать параметр. Если я введу новый элемент «none» enum и сделаю

defaults: new { controller = "Resource", validationType = ValidationType.none } 

Тогда мое действие будет вызвано. Но он всегда будет получать значение параметра ValidationType.none, даже если моя строка запроса имеет ?validating=name! [FromUri] все равно не имеет значения. Что дает?

+0

Не могу подтвердить прямо сейчас, но я думаю, что вам также нужен атрибут FromUri для ValidationType. По умолчанию для PUT используется привязка к телу запроса, а не URI. Только GET связывается с URI, потому что тела нет. Строка запроса является частью tje uri. –

+0

Я пробовал использовать [FromUri], и это не имеет значения. Я также экспериментировал с GET и, похоже, у него такая же проблема, как PUT. –

ответ

2

Duh ... У меня было неправильное имя параметра. Я смутил «валидацию» и «validationType». Как неловко.