HTTP 动词 PUT 和 DELETE:405 方法不允许 - 如何允许?

AxD*_*AxD 4 iis rest kestrel-http-server asp.net-core

我一直在尝试 ASP.NET 的所有建议解决方法,以便能够通过 HTTP 方法 PUT 和 DELETE 解决我的 REST Web 服务。但是,它们似乎都不起作用。(即删除 WebDAV 处理程序或允许所有动词到 ExtensionlessHandler)。

ASP.NET Core Web API(在 IIS 上)需要什么来允许这两个动词(HTTP PUT 和 DELETE)?

PS:我已经使用 CORS 配置了我们的 Web API 项目,但我正在从同一来源的网页访问 Web 服务。所以这也不是 CORS 问题。

AxD*_*AxD 8

一天后,我现在找到了这个错误的原因。以下原因导致发生此错误:

  1. PUT 调用中存在拼写错误,因此未调用 Web API 方法。修复后,必须修复以下两个问题:
  2. 用方法为 Web API 方法加上前缀并省略相应的属性 ( [HttpPut], [HttpDelete])是不够的。因此,必须应用这些属性(这是 ASP.NET Core特有的)。
  3. 向方法提供上述属性是不够的。还需要为这些属性 ( [HttpPut("{id}")], [HttpDelete("id")])提供方法的地址(和查询字符串)参数。(这是 ASP.NET Core特有的。)

请参阅ASP.NET Core Web API:按方法名称路由?.


我相信“ 405 Method not allowed ”是一个非常不恰当的错误信息。它没有反映上述三个原因中的任何一个,并且非常混乱。

此外,我相信“ 400 Bad Request ”、“ 404 Not Found ”,或者——更确切地说——“ 501 Not Implemented ”是更合适的 HTTP 返回状态。


我为此创建了一个 GitHub 问题:
“405:不允许的方法”=误导性错误消息?替换为更好的 HTTP 状态代码

  • HTTP 删除的括号错误,应该是 {} (2认同)

tal*_*999 5

这花了我几个小时才弄清楚。我正在使用 ASP.NET Core 5,无需修改 web.config 来删除 WebDav 或任何内容。相信大多数人都没有意识到POST方法和PUT、DELETE方法的签名的区别。

  • POST 方法网址:http://servername/api/controller
  • PUT 和 DELETE 方法 URL:http://servername/api/controller/id

请注意,您必须将id放入 URL 中才能进行 PUT 和 DELETE。祝你好运。