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

ASP.NET Core 3.1 API CORS问题:IIS Express正常IIS环境报错如何解决?

问题原因与解决方案

疑问1:为什么开发环境运行正常,部署到IIS就需要额外配置CORS?

开发环境使用的IIS Express默认会将所有请求(包括CORS预检的OPTIONS请求)完整转发给ASP.NET Core中间件处理,你在Startup中写的CORS配置可以正常生效。而正式IIS默认会优先拦截OPTIONS预检请求,不会转发到你的应用程序,导致Startup里的CORS逻辑完全没有执行的机会,自然不会返回正确的CORS头,第一次就会报缺少Allow-Control-Allow-Origin的错误。

疑问2:为什么IIS上CORS似乎只允许单个域名,CORS的设计初衷不就是支持多源访问吗?

这不是CORS或者IIS的限制,是错误配置导致的:你直接在web.config的自定义响应头里写死了固定的单个域名https://MYDOMAIN,完全绕过了ASP.NET Core中支持多源判断的CORS逻辑,才会看起来只支持单个域名。正常通过ASP.NET Core中间件配置的CORS是完全支持多源访问的。

疑问3:该如何解决当前的CORS报错问题?

按照以下步骤修改即可:

  • 第一步:删除web.config中你之前添加的所有<httpProtocol><customHeaders>下的CORS相关配置,这部分配置会和应用的CORS逻辑冲突,导致重复返回头或者逻辑被覆盖。
  • 第二步:调整Startup.cs中中间件的顺序,确保UseCors放在UseRouting之后、UseAuthentication/UseAuthorization之前,正确的配置示例如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    // CORS配置必须放在这个位置
    app.UseCors(builder=>{
        builder.SetIsOriginAllowed(origin => true) // 排查问题阶段可以临时全放行,生产环境替换为你的域名校验逻辑
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials();
    });

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}
  • 第三步:修改web.config配置,让IIS将OPTIONS请求转发给ASP.NET Core处理,不要拦截,修改后的system.webServer段示例如下:
<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <!-- 移除IIS自带的CORS模块,避免和应用逻辑冲突 -->
    <remove name="CorsModule" />
  </modules>
  <handlers>
    <remove name="aspNetCore"/>
    <!-- verb设置为*,让ASP.NET Core模块处理所有类型的请求,包括OPTIONS -->
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
  </handlers>
  <!-- 此处保留你原有aspNetCore节点的配置,不需要修改 -->
  <aspNetCore processPath="dotnet" arguments=".\你的应用.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
  • 第四步:重启IIS站点,验证CORS逻辑已经正常生效。

内容的提问来源于stack exchange,提问作者Lee Arnould

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:45:04