如何在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
相关产品推荐
相关产品推荐

