.NET 6启用CORS后PUT、DELETE方法返回405问题求助
解决.NET 6 Web API升级后PUT/DELETE方法的CORS+405问题
问题核心分析
你遇到的PUT/DELETE返回405、CORS报错,大概率是IIS默认启用的WebDAV模块拦截了这些请求,而非CORS配置本身的问题。WebDAV会优先处理PUT/DELETE请求,返回405并覆盖CORS响应头,导致客户端看不到正确的跨域允许信息。
解决方案
1. 禁用IIS的WebDAV模块
在项目的web.config中添加以下配置,彻底禁用WebDAV:
<system.webServer> <modules runAllManagedModulesForAllRequests="false"> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer>
这会阻止WebDAV拦截PUT/DELETE请求,让ASP.NET Core的CORS中间件正常处理。
2. 验证AllowedCORS配置的正确性
确保Configuration["AllowedCORS"]的值格式正确:
- 多个跨域源用逗号分隔,不要加空格(比如
http://servername:port,http://localhost:5000) - 如果是单个源,直接写完整地址(包含协议、域名、端口)
- 可临时改为
.AllowAnyOrigins()测试,确认是否是源配置问题
3. 确认CORS中间件顺序(已正确,可再核对)
确保UseCors()的位置在UseRouting()之后、UseAuthorization()之前,你的Startup.cs里的顺序是对的,保持即可:
app.UseRouting(); app.UseCors(); // 必须在UseRouting之后,UseAuthorization之前 app.UseAuthorization();
4. 验证预检请求(OPTIONS)的响应
用浏览器开发者工具(Network标签)查看Blazor发起的OPTIONS请求:
- 检查响应头是否包含
Access-Control-Allow-Origin(匹配你的客户端源) - 检查
Access-Control-Allow-Methods是否包含PUT、DELETE
如果这些头存在,说明CORS配置生效,问题已解决。
额外说明
你之前测试的AllowAnyMethod()/WithMethods("PUT", "DELETE")本身是正确的,但因为WebDAV先拦截了请求,所以这些配置根本没机会生效。禁用WebDAV后,这些方法的配置会正常工作。
内容的提问来源于stack exchange,提问作者martin
相关产品推荐
相关产品推荐

