您的位置:首页 > 其它

关于跨域调用web Api、Web Service等的解决方案。

2015-01-09 16:47 253 查看
在日常开发中,经常需要调用到其它的网络服务。这里简单介绍下应用场景与实现



比如现在我有2个系统:

一、web项目系统 A

二、文件管理系统 B



在部署在2个系统时可能 A系统部署在 www.a.com 而B系统部署在
www.b.com



而A系统中很多模块,诸如:新闻管理,公司公告.......这些模块都需要上传图片或者资源什么的。

而当一个系统用户较多或比较庞大时,将A系统与B系统分开来开发,再进行分布式的部署是非常有必要的。



这个时候A系统则需要调用B系统公开的API和服务了



实例:假设用从A系统 Ajax发送一个Post请求B

$.Post(http://www.b.com,function(){ ....... });

这样是不会成功的,尽管www.b.com 不需要登录,因为这个时候涉及到跨域了。是没有办法去请求B的。



解决方案有2种:

1、通过B系统解决,B系统公开API或服务时应在response里输出相应的允许跨域的头文件,

具体为:

response.header("Access-Control-Allow-Origin", "*");

response.header("Access-Control-Allow-Headers", "X-Requested-With");
2、通过A系统解决,(另辟蹊径法)

具体为:首先在A系统本身加入一个API,在API中用HttpClient去请求网络上的API或服务。简单代码为:

string responseJson = new HttpClient().PostAsJsonAsync(http://www.b.com/Api/,

参数).Result.Content.ReadAsStringAsync().Result;
return responseJson;

而A系统始终请求A项目中的公开API来获取B项目中的数据,这样相当于经过后台执行了一次中转,A实际是调用的本域。

二种方案已通过验证,方法1好处是减少与自身服务器的通讯,方法2的好处就不多说了,意图很明显。本文结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: