You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:26:28