ASP.NET 下,Ajax跨域访问资源

        互联网上常用的跨域(服务器访问不在同一域名下的网站)方案一般是声明权限,在此提出一个不同于传统思路的方案:服务器后台构造一个HttpWebRequest客户端获取目标网页资源后返回给用户。步骤如下:
1. 在服务器后台增加一个Action。
//访问一个互联网上的JPEG文件,并作为一个Action返回
public ActionResult Other(string url)
{
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    //发送请求并获取相应回应数据
    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
    //直到request.GetResponse()程序才开始向目标网页发送Post请求
    Stream responseStream = response.GetResponseStream();
    MemoryStream ms = new MemoryStream();
    byte[] bArr = new byte[1024];
    int size = responseStream.Read(bArr, 0, bArr.Length);
    while (size > 0)
    {
        //stream.Write(bArr, 0, size);
        ms.Write(bArr, 0, size);
        size = responseStream.Read(bArr, 0, bArr.Length);
    }
    responseStream.Close();
    return new FileContentResult(ms.ToArray(), "image/Jpeg");
}
2. 在View中使用Ajax技术异步获取上一步中的Action。
<script>
	function Ajax()
	{
	    var xmlhttp;
	
	    if (window.XMLHttpRequest)  // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
	        xmlhttp = new XMLHttpRequest();
	    else                        // IE6, IE5 浏览器执行代码
	        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	
		//声明目标类型为二进制文件
	    xmlhttp.responseType = "blob";
	
	    xmlhttp.onreadystatechange = function ()
	    {
	        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
	        {
	            var blob = xmlhttp.response;
	            var img = document.createElement("img");
	            img.src = window.URL.createObjectURL(blob);
	            $('img').html(img);
	    	}
	    }
		
		//将网址作为参数传给服务器后台Other函数,并返回图片文件,在前端视角就是直接访问目标图片链接
		//Home为Other函数所在的控制器HomeController
	    xmlhttp.open("GET", "/Home/Other?url=" + "https://img-home.csdnimg.cn/images/20210105033219.jpg", true);
	    xmlhttp.send();
	}
</script>
<div style="margin-top:20px;">
    <button onclick="GetImg()">点击获取图片</button>
</div>
<p id="img"></p>
现在点击按钮就可以实现异步加载跨域图片了

参考链接
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值