405 Method Not Allowed 请求方法不被允许

本文记录了在项目中遇到405 Method Not Allowed错误的情况,问题源于移动网络的代理服务器拒绝PATCH请求。通过axios捕获错误信息,经过排查,确定问题不是由服务器或nginx引起,而是特定网络环境(如移动网络的WAP接入点)导致。最终通过切换网络和使用电脑模拟器定位问题,指出解决此类问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

405 Method Not Allowed 请求方法不被允许

今天已上线的项目patch请求 突然报错,nginx没有日志,服务也没有日志。前端捕获到405错误。

历经种种排查 网上方法找了一大堆也没用。
最后发现是移动网络的问题 移动的代理服务器拒绝 patch请求 过了一段时间 移动net 蜂窝接入点自动请求成功疑似修复

但是wap仍然失败

通过axios捕获错误信息


{
   
   
	"config": {
   
   
		"transformRequest": {
   
   },
		"transformResponse": {
   
   },
		"timeout": 0,
		"xsrfCookieName": "XSRF-TOKEN",
		"xsrfHeaderName": "X-XSRF-TOKEN",
		"maxContentLength": -1,
		"headers": {
   
   
			"Accept": "application/json, text/plain, */*",
			"Content-Type"
### HTTP 405 Method Not Allowed 错误原因 HTTP状态码`405 Method Not Allowed`表示服务器已理解请求,但是拒绝接受它,并且会通过客户端的任何行为(例如使用同的传输协议、修改访问权限等)来改变这一事实。当客户端尝试使用服务端允许方法发送请求时就会触发此错误[^1]。 对于`.NET Core`应用程序,在新环境中部署后遇到PUT或DELETE请求返回`405 Method Not Allowed`的情况通常是因为Web服务器配置当或者应用本身未正确设置路由规则所致[^2]。 ### 解决方案 #### 配置IIS支持多种HTTP动词 为了使IIS能够接收并处理除GET/POST之外更多的HTTP方法如PUT, DELETE等操作,需要确保启用了对应的模块: - 安装URL Rewrite Module 和 WebDAV Publishing (如果适用)[^1] 另外还需确认web.config文件中的settings节点是否允许这些额外的动作: ```xml <configuration> <system.webServer> <!-- ... --> <handlers> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/> <remove name="ExtensionlessUrlHandler-Integrated-4.0"/> <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/> <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> </handlers> </system.webServer> </configuration> ``` 以上配置确保了无扩展名URL处理器可以响应所有的HTTP动作。 #### 修改ASP.NET Core 应用程序 检查控制器内的属性装饰是否有误,比如应该为特定的操作指定合适的HttpMethod特性标签(`[HttpGet], [HttpPost], [HttpPut], [HttpDelete]`)而是默认全部开放给GET请求: ```csharp // 正确的做法是指定具体允许的方式 [HttpPut("{id}")] public IActionResult UpdateItem(int id, [FromBody] Item item) { // 更新逻辑... } ``` 最后重启网站让更改生效即可解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值