部署至本地IIS的ASP.NET API(.NET8)PUT/DELETE请求CORS错误求助
针对ASP.NET Core (.NET 8)部署IIS后PUT/DELETE请求CORS问题的排查方案
以下是针对你遇到问题的具体排查和解决步骤:
检查IIS是否允许PUT/DELETE动词
默认IIS可能拦截PUT和DELETE请求,导致请求根本无法到达ASP.NET Core应用。可以通过两种方式处理:- 图形界面配置:打开IIS管理器,找到目标站点 → 点击「处理程序映射」→ 找到「AspNetCoreModuleV2」(对应.NET 8),右键选择「编辑请求限制」→ 在「动词」选项卡选择「全部动词」,或手动添加PUT、DELETE。
- web.config配置:直接在站点的web.config中确保ASP.NET Core模块允许所有动词:
<system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> </system.webServer>处理OPTIONS预检请求转发问题
PUT/DELETE属于非简单请求,浏览器会先发OPTIONS预检请求。IIS可能直接处理该请求而不转发到你的应用,导致CORS头缺失。可以在web.config中添加以下配置:<system.webServer> <modules runAllManagedModulesForAllRequests="false"> <remove name="WebDAVModule" /> <!-- WebDAV模块常干扰PUT/DELETE请求 --> </modules> <handlers> <remove name="WebDAV" /> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <httpProtocol> <customHeaders> <remove name="Access-Control-Allow-Origin" /> <!-- 避免IIS和应用重复设置头 --> </customHeaders> </httpProtocol> </system.webServer>确认CORS中间件的注册顺序
你的CORS规则本身没问题,但必须保证中间件顺序正确——UseCors必须放在UseRouting之后、UseAuthorization之前:var builder = WebApplication.CreateBuilder(args); builder.Services.AddCors(); builder.Services.AddControllers(); var app = builder.Build(); app.UseRouting(); app.UseCors(x => x .AllowAnyHeader() .AllowAnyMethod() .SetIsOriginAllowed(origin => true) .AllowCredentials()); app.UseAuthorization(); app.MapControllers(); app.Run();顺序错误会导致授权中间件提前拦截请求,CORS头无法正常添加。
排查IIS其他模块干扰
暂时禁用站点的URL Rewrite、Compression等模块,测试是否恢复正常。这些模块可能修改请求或响应头,导致CORS规则失效。
内容的提问来源于stack exchange,提问作者Bruno Gonzalez Torres
相关产品推荐
相关产品推荐

