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

发布于 2024-09-07 23:05:18 字数 440 浏览 9 评论 0原文

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

I'm attempting to process the body of an HTTP PUT request, but it seems that the MVC engine (or perhaps the ASP.NET stack underpinning it) isn't automatically parsing & populating the request's Form collection with the body data.

This does work as expected when doing a POST.

Note that the request's InputStream property does contain the expected data, and obviously I can build my own key/value collection using that, however I would have expected PUT to work the same way as a POST.

Am I missing something here?

Example action method:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘亓 2024-09-14 23:05:18

引用 doc

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

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

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

Quote from the doc:

The Form collection retrieves the
values of form elements posted to the
HTTP request body, with a form using
the POST method.

So instead of using Request.Form I would recommend you writing a custom model class that will hold the request data and pass it as action parameter. The default model binder will automatically populate the properties from the key/values passed in the request stream:

[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Purchase(MyCustomModel model)
{
    // Do stuff with the model
}
只涨不跌 2024-09-14 23:05:18

Asp.net 不支持对自定义请求进行开箱即用的 PUT。如果您未使用内置功能来生成 PUT url,请尝试在标头、表单或查询字符串中添加值为 PUTX-HTTP-Method-Override

Asp.net does not support PUT out of the box for custom requests. If you are using not the built in capabilities to generate the PUT url try adding X-HTTP-Method-Override with value of PUT in headers, form, or query string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文