跨域/preflight request/如何响应/WebService/C#

jingshaohui 2018-07-06 04:54:24
公司需要用网易七鱼的客服接口,配置后的接口按照接口文档上的要求需要进行跨域支持,其中的获取用户信息的接口是先进行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#获取用户信息
...全文
1425 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingshaohui 2018-07-10
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
关于 服务器端 把 Access-Control-Allow-Origin 设置为 * 的问题,以及客户端是否支持 cors 的问题,我只看测试数据。不会调试、测试就不会开发。只会抄代码不行。

你只贴你的配置和代码,毫无测试、调试画面可以贴出来啊?

谢谢,问题已经解决了,原因是没有在Access-Control-Allow-Headers中加入自定义的X-App-Id请求字段,而七鱼对接口的请求是带X-App-Id的。
此外还有原因是我用的是WebServices技术,而WebServices/WebApi等在返回的Json中总是在Json主体外加一个"d",导致原生客户端没办法正确的请求,由于客户端不是自己的,没办法在接口请求代码中进行自动过滤,就只能用其他方式实现了。
jingshaohui 2018-07-10
  • 打赏
  • 举报
回复



引用 4 楼 sp1234 的回复:
怎么“网易七鱼的客服接口”是你们开发的服务器端?不会吧?!

网易七鱼客服接口不是我们开发的,但是在这个过程中网易七鱼需要调用我们CRM系统的接口用户对接用户数据,所以,是网易七鱼调用我们的接口,数据库与服务器在我们这边,我们只是在网易七鱼那边配置接口调用地址。在这个过程中,网易七鱼是客户端,我们是服务端
  • 打赏
  • 举报
回复
关于 服务器端 把 Access-Control-Allow-Origin 设置为 * 的问题,以及客户端是否支持 cors 的问题,我只看测试数据。不会调试、测试就不会开发。只会抄代码不行。

你只贴你的配置和代码,毫无测试、调试画面可以贴出来啊?
  • 打赏
  • 举报
回复
怎么“网易七鱼的客服接口”是你们开发的服务器端?不会吧?!
jingshaohui 2018-07-06
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
服务器端可以把 Access-Control-Allow-Origin 设置为 *。客户端(例如使用 jquery )要声明需要支持 cors。

但是,如果服务器不是你们的,而问题出在服务器端,那你就要去找服务器开发商。

设置过了,服务器是我们的,但是客户端不是,我不知道服务端除了配置文件的修改之外还需不需要其他配置
  • 打赏
  • 举报
回复
服务器端可以把 Access-Control-Allow-Origin 设置为 *。客户端(例如使用 jquery )要声明需要支持 cors。

但是,如果服务器不是你们的,而问题出在服务器端,那你就要去找服务器开发商。
jingshaohui 2018-07-06
  • 打赏
  • 举报
回复

这是报文信息以及报错位置,在接到电话的时候调用接口,然后就报错

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧