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 问题。
一天后,我现在找到了这个错误的原因。以下原因导致发生此错误:
[HttpPut]
, [HttpDelete]
)是不够的。因此,必须应用这些属性(这是 ASP.NET Core特有的)。[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 状态代码
这花了我几个小时才弄清楚。我正在使用 ASP.NET Core 5,无需修改 web.config 来删除 WebDav 或任何内容。相信大多数人都没有意识到POST方法和PUT、DELETE方法的签名的区别。
http://servername/api/controller
http://servername/api/controller/id
请注意,您必须将id放入 URL 中才能进行 PUT 和 DELETE。祝你好运。
归档时间: |
|
查看次数: |
12867 次 |
最近记录: |