背景:目前自己建了一个c#的wcf后端服务,并在IIS应用托管了网站,在其他域名地址或本地不同端口的网站去请求这个wcf后端接口,浏览器会出现CORS跨域问题,会被拦截。然后呢,自己在网上找快速的解决方案,都是特别复杂,而且不一定有效,于是有了这一篇文章,如果对你有所帮助,麻烦点个赞,蟹蟹!

思路:先解决IIS拦截问题→c#wcf中的web.config配置问题→问题解决

解决IIS拦截问题

由于浏览器的同源策略,浏览器请求跨域外部接口时会预先发送option预检请求,所以要解决IIS是否提前拦截了,IIS中需要找到两个地方删除,预检信息直接由wcf后端服务去解决

1、选中站点 → 模块 → 找到 WebDAVModule → 移除

2、选中站点 → 处理程序映射 → 找到 OPTIONSVerbHandler → 移除

c#wcf中的web.config配置问题

c#后端代码的web.config配置如下
主要增加以下片段代码,记得是在system.webServer添加

 <httpProtocol>
     <customHeaders>
       <!-- 允许跨域域名,* 代表所有,生产建议指定前端地址 -->
       <add name="Access-Control-Allow-Origin" value="*" />
       <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS" />
       <add name="Access-Control-Allow-Headers" value="Content-Type,Authorization,Accept" />
       <add name="Access-Control-Max-Age" value="86400" />
     </customHeaders>
   </httpProtocol>
   <!-- 拦截 OPTIONS 请求直接返回 200 -->
   <handlers>
     <remove name="OPTIONSVerbHandler" />
     <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" resourceType="Unspecified" />
   </handlers>

然后就基本可以了

更多推荐