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

如何在C# ASP.NET Web API的CORS配置中允许自定义请求头

解决步骤

  • 第一步:核对EnableCors属性的参数顺序
    该属性的构造函数参数顺序为「允许的来源、允许的请求头、允许的请求方法」,未显式指定参数名时顺序错误会导致头配置不生效,正确写法参考:

    // 显式指定参数名避免顺序错误
    [EnableCors(origins: "http://localhost:12345", headers: "myheaderfield", methods: "*")]
    

    如果你同时在WebApiConfig全局配置和Controller上都加了CORS规则,优先保留Controller级别的配置,避免规则冲突。

  • 第二步:排查OPTIONS预检请求拦截问题
    打开Chrome开发者工具的「网络」面板,找到对应接口的OPTIONS预检请求,若状态码为404/405,说明IIS默认拦截了OPTIONS请求,没有走到Web API的CORS处理逻辑,需要在Web.config的<system.webServer>节点下添加如下配置:

    <system.webServer>
      <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <remove name="OPTIONSVerbHandler" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
      <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
          <add name="Access-Control-Allow-Headers" value="myheaderfield" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
    
  • 第三步:避免通配符限制
    如果你的请求携带身份凭证(Cookie、Authorization头),CORS规则里不能使用*通配符,必须明确指定所有允许的来源、请求头和请求方法。

  • 第四步:清除缓存测试
    浏览器会缓存预检请求结果最长10分钟,修改配置后需要在Chrome开发者工具的「网络」面板勾选「禁用缓存」,再强制刷新页面重新测试,避免缓存的旧预检结果导致持续报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:54:03