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

来源:互联网 发布:数据分析属于it么 编辑:程序博客网 时间:2024/06/06 01:11

在日常开发中,经常需要调用到其它的网络服务。这里简单介绍下应用场景与实现

 

比如现在我有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的好处就不多说了,意图很明显。本文结束

 

 

0 0
原创粉丝点击