使用HTTP PUT方法(ASP.NET MVC)时未填充Request.Form

时间:2010-06-30 01:02:40

标签: asp.net-mvc http-put

我正在尝试处理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)
}

2 个答案:

答案 0 :(得分:2)

来自doc

的引用
  

表单集合检索   表单元素的值发布到   HTTP请求正文,使用表单   POST方法。

因此,我建议您编写一个自定义模型类来保存请求数据并将其作为操作参数传递,而不是使用Request.Form。默认模型绑定器将自动填充请求流中传递的键/值的属性:

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

答案 1 :(得分:0)

Asp.net不支持自定义请求的PUT开箱即用。如果您使用的不是内置功能来生成PUT网址,请尝试在标头,表单或查询字符串中添加值X-HTTP-Method-Override的{​​{1}}。