2010-06-30 3 views
2

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

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

Цитата из doc:

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

Так что вместо использования Request.Form Я бы рекомендовал вам написать пользовательский класс модели, который будет хранить данные запроса и передавать его в качестве параметра действия. Модель по умолчанию связующие автоматически заполнят свойства из ключевых/значений, передаваемых в потоке запроса:

[AcceptVerbs(HttpVerbs.Put)] 
public ActionResult Purchase(MyCustomModel model) 
{ 
    // Do stuff with the model 
} 
0

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

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