Request.Form не заполняется при использовании метода HTTP PUT (ASP.NET MVC) - PullRequest
2 голосов
/ 30 июня 2010

Я пытаюсь обработать тело HTTP-запроса PUT, но кажется, что механизм MVC (или, возможно, его поддерживает стек ASP.NET) не выполняет автоматический анализ и заполнение коллекции Form запроса данными тела. .

Это работает как положено при выполнении POST.

Обратите внимание, что свойство InputStream запроса содержит ожидаемые данные, и, очевидно, я могу создать свою собственную коллекцию ключей / значений, однако я бы ожидал, что PUT будет работать так же, как POST.

Я что-то здесь упускаю?

Пример метода действия:

[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Purchase(int id, FormCollection data)
{
  // Do stuff with data, except the collection is empty (as is Request.Form)
}

Ответы [ 2 ]

2 голосов
/ 30 июня 2010

Цитата из doc :

Коллекция Form извлекает значения элементов формы, отправленных в тело HTTP-запроса, с помощью формы с использованием метода POST.

Поэтому вместо использования Request.Form я бы порекомендовал вам написать собственный класс модели, который будет содержать данные запроса и передавать их в качестве параметра действия.Связыватель модели по умолчанию автоматически заполняет свойства из ключа / значений, переданных в потоке запросов:

[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Purchase(MyCustomModel model)
{
    // Do stuff with the model
}
0 голосов
/ 03 мая 2011

Asp.net не поддерживает PUT из коробки для пользовательских запросов.Если вы не используете встроенные возможности для генерации URL-адреса PUT, попробуйте добавить X-HTTP-Method-Override со значением PUT в заголовки, форму или строку запроса.

...