У меня есть действие контроллера, как это:Почему я не могу привязать этот параметр 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] все равно не имеет значения. Что дает?
Не могу подтвердить прямо сейчас, но я думаю, что вам также нужен атрибут FromUri для ValidationType. По умолчанию для PUT используется привязка к телу запроса, а не URI. Только GET связывается с URI, потому что тела нет. Строка запроса является частью tje uri. –
Я пробовал использовать [FromUri], и это не имеет значения. Я также экспериментировал с GET и, похоже, у него такая же проблема, как PUT. –