Request.Form не заполняется при использовании метода HTTP PUT (ASP.NET MVC)

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

Это работает, как и ожидалось, при выполнении 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)
}

person Mark Beaton    schedule 30.06.2010    source источник


Ответы (2)


Цитата из документа:

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

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

[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Purchase(MyCustomModel model)
{
    // Do stuff with the model
}
person Darin Dimitrov    schedule 30.06.2010

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

person suhair    schedule 03.05.2011