如何在不启用CORS的情况下托管ASP.NET WebAPI并允许任意域访问?
临时允许任意域调用Web服务的配置方案
嘿,针对你这个临时过渡的场景(后续会迁移到同应用、不用于生产),我给你补全完整的web.config配置,还有几个关键的注意事项,帮你顺利搞定跨域调用:
完整的web.config跨域配置片段
把这段配置放到你的<system.webServer>节点下就行:
<system.webServer> <httpProtocol> <customHeaders> <!-- 允许任意来源发起跨域请求 --> <add name="Access-Control-Allow-Origin" value="*" /> <!-- 列出你的Web服务支持的HTTP方法,按需调整 --> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> <!-- 允许前端传递的请求头,比如Content-Type、授权头这些,根据实际需求加 --> <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" /> <!-- 预检请求的缓存时间,设置后浏览器一小时内不用重复发OPTIONS请求 --> <add name="Access-Control-Max-Age" value="3600" /> </customHeaders> </httpProtocol> </system.webServer>
临时使用的核心提醒
- 生产环境务必删除:
Access-Control-Allow-Origin: *等于给所有网站开了调用权限,安全风险极高,等你把新项目迁移到同Web应用后,一定要立刻删掉这段配置。 - 别忽略OPTIONS预检请求:如果你的Web服务要处理PUT、DELETE这类非简单请求,浏览器会先发OPTIONS请求确认权限,上面的配置已经允许了OPTIONS方法,但如果你的项目有自定义路由拦截或者权限校验,记得别把OPTIONS请求拦下来。
- 按需裁剪权限:
Access-Control-Allow-Methods和Access-Control-Allow-Headers别一股脑全加,只保留你的Web服务实际需要的方法和头,能少开权限就少开。
小补充
要是你的Web服务需要前端带Cookie(比如身份验证),*是不支持这种场景的,但既然是临时过渡,大概率不需要;真要是有这个需求,那你就得指定具体域名,但这和你“允许任意域”的需求冲突,所以临时用*就够了。
内容的提问来源于stack exchange,提问作者Leslie Hanks
相关产品推荐
相关产品推荐

