公司需要用网易七鱼的客服接口,配置后的接口按照接口文档上的要求需要进行跨域支持,其中的获取用户信息的接口是先进行Option请求,再进行Post请求。但在测试的时候,发现对
https://****.****.cn/qiyuServices.asmx/GetCallUserInfo
的请求总是到Option后就结束,返回状态显示的是200成功的,但是Console中显示
Request header field X-App-Id is not allowed by Access-Control-Allow-Headers in preflight response.
的错误。
由于是第一次做跨域方面的内容,我用的是C#比较简单的webservice,根据网上的各种文章,也修改了配置文件为
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
</protocols>
</webServices>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="Get,Options,Post"/>
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
<add name="Access-Control-Allow-Origin" value="https://bnmdhgyxgs.qiyukf.com"/>
</customHeaders>
</httpProtocol>
来实现跨域。
除此之外,也对接口进行了认证,解决了Https的协议降级问题。目前就剩下跨域问题了。
网上查了很多文章,也知道自己的问题是preflight request的Option请求后没有给予正确的响应,但网上看到的都是报文从Option到Post请求过程的处理,但是服务端代码收到Option后如何允许就没有提到了,C#方面也没有相关的参考代码,文章基本都是一样的。
接口文档:
http://qiyukf.com/newdoc/html/qiyu_crm_interface.html#获取用户信息