ASP.net mvc 中跨域问题

比如说现在有两个网站,webA 和 webB , 

如果webA的其中一个html页面中,使用ajax请求webB的一个方法,例如:

//HTML In webA
$(function () {


            $('#btnajax').click(function () {

                $.ajax({
                    type: "POST",
                    url: "http://webB/home/getqita",  
                    data: {},
                    success: function (data) {
                        alert(data);
                    },
                    error: function (jqXHR) {

                    }
                });
            });//end click



        });//end page ready

这个时候,如果webB 的 /home/getqita  没有进行任何的跨域操作处理 ,  那么webA 的js机会提示错误,大概如下:

        Access to XMLHttpRequest at 'http://webB/home/getqita' 
        from origin 'http://lwebA' has been blocked by CORS policy: 
        No 'Access-Control-Allow-Origin' header is present on the requested resource.

在前端js运行的时候会提示这个错误, 那么如何解决呢?

第一种思路,可以改造webB 里面的  /home/getqita  方法, 在对应的controller-Action里面,给Response增加Header内容,例如:

//Controller-action in webB
        [HttpPost]
        public ActionResult GetQita()
        {
            Response.AppendHeader("Access-Control-Allow-Origin", "*");
            return Content("qi ta");
        }

("Access-Control-Allow-Origin", "*")  中的星号,代表允许所有网站的跨域请求 。

重新运行webB之后, 就可以在webA中ajax正常请求到http://webB/home/getqita 了 。 

 

第二种思路,有些时候,webB根本就不是自己家开发的,是其他团队提供的 , 无法要求他人改造webB ,

所以只好在自己的webA中解决 ,  刚刚上面的报错是存在前端js提示的错误 ,  我们可以利用C# 中 HttpWebRequest  后台操作, 

在webA 中新加一个controller ,然后利用HttpWebRequest  获得  http://webB/home/getqita 的数据, 然后webA的任何一个前端ajax都可以取数据了,

        // new controller in webA        
        [HttpPost]
        public ActionResult GetWebB()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webB_URL);
            ....
            return Content();
        }

 

我是比较推荐第二种思路的, 网上有很多 HttpWebRequest  的文章 ,参考下就可以写出来了 。 

大多都是构造好parpmeter ,然后对着url 进行post( RequestStream.Write() ) , 然后读取response stream 。

本人菜鸟一个,写错的话请见谅。  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值