代码之家  ›  专栏  ›  技术社区  ›  AllramEst

使用delete方法的表单不会使用HttpDelete ActionVerb命中asp.net核心控制器[重复]

  •  0
  • AllramEst  · 技术社区  · 6 年前

    我在这里见过几个问题 How to debug RESTful services ,其中提到:

    不幸的是,同一个浏览器不允许我测试HTTP PUT、DELETE,甚至在某种程度上测试HTTP POST。

    我还听说浏览器只支持GET和POST,来自其他一些来源,比如:

    不过,Firefox中的一些快速测试显示 PUT DELETE 请求按预期工作 XMLHttpRequest 成功完成,请求将以正确的方法显示在服务器日志中我是否遗漏了一些方面,例如跨浏览器兼容性或不明显的限制?

    0 回复  |  直到 8 年前
        1
  •  457
  •   mikemaccana    6 年前

    不,那个 HTML 5 spec 提及:

    method和formmethod内容属性是枚举属性 具有以下关键字和状态:

    关键字 得到 ,映射到状态GET,指示HTTP GET 方法。GET方法应该只请求和检索数据 应该没有其他效果。

    关键字 邮递 ,映射到状态 POST,表示httppost方法。POST方法要求 服务器接受要处理的提交表单数据,这可能 结果将一个项目添加到数据库中,创建一个新站点 页资源,更新现有页,或所有 提到的结果。

    关键字 对话 ,映射到状态对话框,指示 提交表单的目的是关闭对话框,其中 表单发现自己,如果有的话,否则就不提交。

    这些属性的默认无效值是GET state

    即仅支持HTML表单 得到 岗位 作为HTTP请求方法解决此问题的方法是使用服务器读取的隐藏表单字段和相应发送的请求,在POST中传送其他方法。

    然而, 得到 , 岗位 , 投入 删除 在所有主要的web浏览器(如Firefox、Safari、Chrome、Opera)中,XMLHttpRequest(即AJAX调用)的实现都支持它。

        2
  •  78
  •   Anne    14 年前

    HTML表单支持GET和POST(HTML5一度增加了PUT/DELETE,但这些都被删除了。)

    XMLHttpRequest支持每个方法,包括CHICKEN,尽管有些方法名与大小写匹配不敏感(每个HTTP的方法区分大小写),而且出于安全原因(例如CONNECT),有些方法名根本不受支持。

    浏览器正在慢慢地融合到XMLHttpRequest指定的规则上,但是正如另一条评论所指出的,仍然存在一些差异。

        3
  •  41
  •   Knu    6 年前

    XMLHttpRequest 是JavaScript对象模型中的标准对象。

    根据维基百科, XMLHttpRequest 最初作为ActiveX对象出现在Internet Explorer 5中,但后来成为一个标准,并从1.0、Apple Safari 1.2、Opera 7.60-p1和IE 7.0开始在Mozilla家族的JavaScript中使用。

    The open() method 在对象上,将HTTP方法作为参数-并指定为采用任何有效的HTTP方法(请参见链接的第5项)-包括 GET , POST , HEAD , PUT DELETE ,作为 specified by RFC 2616 .

    作为旁注 IE 7–8 only permit the following HTTP methods: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "LOCK", "UNLOCK", and "OPTIONS" .

        4
  •  17
  •   Ciro Santilli OurBigBook.com    6 年前

    _method 隐藏字段解决方案

    用于Rails,可适用于任何框架:

    • 添加隐藏的 _方法 任何未获取或发布的表单的参数:

      <input type="hidden" name="_method" value="DELETE">
      

      这可以通过HTML创建助手方法(例如Rails)在框架中自动完成 form_tag )

    • 固定实际表单方法以发布( <form method="post" )

    • 过程 _方法 在服务器上执行,就像该方法已被发送而不是实际的POST一样

    不可能的原因/历史: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

        5
  •  15
  •   Hank Gay    16 年前

    我相信这些评论是指浏览器,即点击链接和提交表单,而不是 XMLHttpRequest . XMLHttpRequest请求 只是一个定制客户 用JavaScript编写,使用浏览器作为运行时。

    更新:为了澄清,我不是那个意思(尽管我写过) 写的 XMLHttpRequest请求 ;我的意思是你写的代码 XMLHttpRequest请求 . 浏览器本身不支持 XMLHttpRequest请求 . XMLHttpRequest请求 来自JavaScript运行时,该运行时可能由浏览器托管,尽管它不是必需的(请参见 Rhino )这就是为什么人们说浏览器不支持 PUT DELETE 因为实际上是JavaScript支持它们。

        6
  •  9
  •   Stijn de Witt    9 年前

    ,PUT,DELETE,HEAD等HTTP方法在所有现代浏览器中都可用。

    服从 XMLHttpRequest Level 2 浏览器 必须 支持这些方法。要检查哪些浏览器支持XMLHttpRequest Level 2,我建议使用CanIUse:

    http://caniuse.com/#feat=xhr2

    只有Opera Mini缺少atm支持(juli'15),但Opera Mini缺少对所有内容的支持:)

        7
  •  7
  •   jharlap    15 年前

    只是添加-Safari2和更早的版本绝对不支持PUT和DELETE我得到了3的印象,但是我没有时间再测试了Safari4绝对支持PUT和DELETE。