【问题标题】:Is it possible to trigger an HTTP DELETE request from an HTML form?是否可以从 HTML 表单触发 HTTP DELETE 请求?
【发布时间】:2010-09-21 14:04:28
【问题描述】:

我有一个 ASP.NET MVC 项目,并且我有一个接受 GET、POST 和 DELETE 请求的操作。每种类型的请求都通过我的控制器 Action 方法上的属性进行过滤。

[ActionName(Constants.AdministrationGraphDashboardAction),
AcceptVerbs(HttpVerbs.Post)]
public ActionResult GraphAdd([ModelBinder(typeof (GraphDescriptorBinder))] GraphDescriptor details);

[ActionName(Constants.AdministrationGraphDashboardAction),
AcceptVerbs(HttpVerbs.Delete)]
public ActionResult GraphDelete([ModelBinder(typeof (RdfUriBinder))] RdfUri graphUri)

我的GraphAdd 方法运行良好。我想弄清楚的是如何创建 HTML <form /><a />(链接),这将导致浏览器执行 HTTP 删除请求并触发我的 GraphDelete 方法。

如果有办法做到这一点,有人可以发布一些示例 HTML,如果可用,我应该使用 MVC HtmlHelper 方法吗?

【问题讨论】:

    标签: html asp.net-mvc


    【解决方案1】:

    我不相信这是可能的。 HTML4 和 XHTML 1.0 中表单元素的方法属性只接受 GET 或 POST。此外,大多数网络服务器的标准配置都会拒绝 DELETE 和 PUT 请求。假设您已将网络服务器配置为允许使用 PUT / DELETE 之类的方法(例如 WebDav 所做的),那么您可以创建自己的 HTTP 请求:

    DELETE /resource.html HTTP/1.1
    Host: domain.com
    

    并妥善处理。但是,没有办法通过当前的 HTML 表单来做到这一点。出于兴趣,有some discussion 用于 HTML5 中的 DELETE 支持。

    【讨论】:

    • 我希望 HTML5 增加对 HTTP 动词的支持。
    • 对于 Asp Mvc,有 HttpMethodOverride msdn.microsoft.com/en-us/library/ee407388(v=vs.118).aspx 这样的东西。这通过让浏览器提交一个带有隐藏字段的表单 POST 来实现,该隐藏字段覆盖在确定在 .Net 路由引擎中调用哪个控制器操作时使用的方法。
    【解决方案2】:

    使用 XMLHttpRequest,它不仅是“最佳实践”,而且是唯一的方法。

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 1970-01-01
      • 2016-10-17
      • 2021-01-27
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 2020-08-09
      相关资源
      最近更新 更多