tnblog
首页
视频
资源
登录
有个性,不需要签名
排名
17
文章
40
粉丝
16
评论
21
Linq or Sql 取树末级节点
剑轩 : 这个方法是真的帅!
Python实例 2-12306抢票(二) 下单
18335584353 : 哥。我也是总返回url":"/leftTicket/init",&quot...
Visual Studio小技巧
剑轩 : [斜眼笑][斜眼笑]开会完了认真看了一遍
C#网络流读取(图片)
风清月 : 把一个图片放到字节数组里边[发呆](`・ω・´)
C#与Java二进制编码转换,补码
风清月 : 我勒个擦.....有时间这种问题很坑很难发现哇o(╥﹏╥)o
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

跨域问题

6021人阅读 2018/11/22 11:13 总访问:286735 评论:0 收藏:0 手机
分类: .NET

跨域是指浏览器无法执行其他网站的脚本。(域名不同、子域名不同、端口不同、协议不同都属于跨域)


可通过前台后台两种方式解决跨域。前台:Jsonp(请求目标需可控),后台HttpClient。


一、JSONP

jsonp:为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递  一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹JSON数据,这样客户端就可以随    意定制自己的函数来自动处理返回数据了。


 json、jsonp详解  


 


实现:


  1. //请求目标的后台方法
  2. public string WcfTest(string str)
  3.         {
  4.             if (!string.IsNullOrEmpty(str))
  5.                 return "successCallback(1)";
  6.             else
  7.                 return "successCallback(0)";
  8.         }



  1.  //发出请求的的ajax
  2.  $.ajax({
  3.             url'http://localhost:14063/home/JsonpTest',
  4.             type"get",
  5.             data: {str:"1"},
  6.             dataType'jsonp',
  7.             jsonpCallback"successCallback",//根据返回的方法来定义,否则会出现返回成功不进入success的方法,只会进error方法
  8.             success: function (data{
  9.                 console.log('success');
  10.                 console.log(data);
  11.             },
  12.             errorfunction (err{
  13.                 console.log('err');
  14.                 console.log(err);
  15.             }
  16.         });








注意:


1.jsonp方式发出的请求都会变成get请求。


2.设置jsonpCallback否则会出现无法进入success方法的情况,jsonpCallback课根据返回json方法的来自定义。






二、后台发出请求的方式,使用HttpClient

 

  1. public async Task<stringHps()
  2.         {
  3.             string url = "http://localhost:14063/home/JsonpTest";
  4.             HttpClientHandler handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.None };
  5.  
  6.             using (HttpClient httpclient = new HttpClient(handler))
  7.             {
  8.                 httpclient.BaseAddress = new Uri(url);
  9.                 FormUrlEncodedContent content = new FormUrlEncodedContent(new Dictionary<stringstring>()
  10.                                    {
  11.                                       {"username","1111"},
  12.                                       {"pwd","1234"},
  13.                                    }); //参数
  14.  
  15.                 Task<HttpResponseMessage> response = httpclient.PostAsync(url, content);
  16.                 string responseString = await response.Result.Content.ReadAsStringAsync();
  17.                 return responseString;
  18.  
  19.             }
  20.         }






欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价