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

本文介绍了在分布式部署环境下,系统A如何跨域调用系统B的API和服务。通过实际应用场景和例子,阐述了由于跨域限制导致的问题,并提出了两种解决方案:1. B系统在响应中设置允许跨域的头文件;2. 使用JSONP或CORS策略。这两种方法可以帮助开发者解决不同域名间API调用的难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值