Rest HTTP谓词放置和删除:不允许405方法-如何允许?
我一直在尝试ASP.NET所有建议的解决方法,以便能够通过HTTP方法PUT和DELETE来解决REST web服务。然而,它们似乎都不起作用。(即删除WebDAV处理程序或允许所有动词都使用ExtensionlessHandler) ASP.NET核心Web API(在IIS上)中需要什么来允许这两个动词(HTTP PUT和DELETE)Rest HTTP谓词放置和删除:不允许405方法-如何允许?,rest,iis,asp.net-core,kestrel-http-server,Rest,Iis,Asp.net Core,Kestrel Http Server,我一直在尝试ASP.NET所有建议的解决方法,以便能够通过HTTP方法PUT和DELETE来解决REST web服务。然而,它们似乎都不起作用。(即删除WebDAV处理程序或允许所有动词都使用ExtensionlessHandler) ASP.NET核心Web API(在IIS上)中需要什么来允许这两个动词(HTTP PUT和DELETE) PS:我已经使用CORS配置了我们的Web API项目,但是我正在从同一来源的网页访问Web服务。所以这也不是CORS的问题。一天后,我找到了这个错误的原因
PS:我已经使用CORS配置了我们的Web API项目,但是我正在从同一来源的网页访问Web服务。所以这也不是CORS的问题。一天后,我找到了这个错误的原因。发生此错误的原因如下:
[HttpPut]
,[HttpDelete]
)。因此,必须应用这些属性(这是ASP.NET核心所特有的)[HttpPut({id}”)]
,[HttpDelete(“id”)]
)提供方法的地址(以及查询字符串等)参数。(这是ASP.NET核心所特有的)我认为“405方法不允许””是一条非常不恰当的错误消息。它没有反映上述三个原因中的任何一个,并且非常令人困惑 一、 此外,相信“400错误请求””、“404未找到””,或者-更确切地说-“501未实现””将是更合适的HTTP返回状态
我为此创建了一个GitHub问题:
@AxD解释得很好。在我的情况下,以下是问题
[HttpDelete("{cardioId:length(24)}")]
public async Task<IActionResult> Delete([FromBody] string cardioId)
[HttpDelete(“{cardioId:length(24)}”)]
公共异步任务删除([FromBody]字符串心形)
在复制和粘贴代码时,我错误地忘记将[FromBody]更改为[FromRoute],这导致了不允许使用此405方法的错误,这是非常不合适的
当您遇到此类错误时,请仔细检查此类错误。我花了几个小时才弄清楚。我使用的是ASP.NET Core 5,不需要修改web.config来删除WebDav或任何东西。我相信大多数人没有意识到POST方法和PUT、DELETE方法签名的区别
- POST方法URL:
http://servername/api/controller
- 放置和删除方法URL:
http://servername/api/controller/id
请注意,您必须在URL中输入id,才能进行放置和删除。祝您好运。默认情况下已经存在:
您是否将[HttpPut]
/[HttpDelete]
属性添加到相应的操作中?默认情况下,操作只接受GET(可能是POST-not-sure off-of-the-the-head)。HTTP Delete的括号错误,应该是{}