a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

基于C#后臺(tái)調(diào)用跨域MVC服務(wù)及帶Cookie驗(yàn)證的實(shí)現(xiàn)

2020-01-24 03:24:21
字體:
供稿:網(wǎng)友

背景
隨著富客戶端框架的盛行,以及眾多優(yōu)秀的前端js框架,很多情況我們會(huì)遇到跨域的問題,而js的ajax請(qǐng)求是不允許直接跨域訪問的,當(dāng)然你會(huì)說可以用JSONP等,但是由于代碼潔癖,不想在前端和后臺(tái)添加callback,而且很多情況你是無法控制的,需要牽連考慮太多的情況。

所以我直接繞過了,每個(gè)前端應(yīng)用,自帶一個(gè)通用后端服務(wù)代理,該服務(wù)解決跨域問題,自動(dòng)代理幫前臺(tái)獲取跨域的數(shù)據(jù)。

如何算跨域
雖然是個(gè)老問題,但是還是要提醒注意下兩點(diǎn):同IP,不同端口,數(shù)據(jù)訪問是跨域的,但是Cookie訪問是可以的(這個(gè)讓我很難理解)

解決,源碼

復(fù)制代碼 代碼如下:

    CookieContainer cookieContainer = new CookieContainer();

     [HttpPost]
        public string CommonPost(string url)
        {
            log.Info(CookieHelper.GetCookie("ITDC_UserName") + "進(jìn)入方法CommonPost Url=" + url);
            Uri address = new Uri(System.Configuration.ConfigurationManager.AppSettings["RESTfulAPI"].ToString() + url);
            HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
       //遠(yuǎn)程服務(wù),需要加入cookie驗(yàn)證
            cookieContainer.Add(address, GetCookie("ITDC_UserName"));
            cookieContainer.Add(address, GetCookie("ITDC_UserRole"));
            request.CookieContainer = cookieContainer;
            StringBuilder data = new StringBuilder();
            for (int i = 0; i < Request.QueryString.Count; i++)
            {
                if (Request.QueryString.Keys[i].ToString() == "url") continue;
                data.Append("&" + Request.QueryString.Keys[i].ToString() + "=" + Request.QueryString[i].ToString());
            }
            // Create a byte array of the data we want to send
            byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString().TrimStart('&'));
            // Set the content length in the request headers
            request.ContentLength = byteData.Length;
            // Write data 
            using (Stream postStream = request.GetRequestStream())
            {
                postStream.Write(byteData, 0, byteData.Length);
            } 
            string result = "";
            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());
                result = reader.ReadToEnd();
            }
            log.Info(CookieHelper.GetCookie("ITDC_UserName") + " 執(zhí)行完成 CommonPost Url=" + url);
            return (result);
        }


前臺(tái)調(diào)用
復(fù)制代碼 代碼如下:

Ext.Ajax.request({url: APIUrl + '/Nebula/CommonPost?url=/Nebula/PostComment/&KlId=1&Msg=ok&Author=admin&Title=文章標(biāo)題',
                  method: "POST",
                  success: function (response) {
                              Ext.Viewport.unmask();
                              var obj = Ext.decode(response.responseText);
                              Ext.Msg.alert("提示", obj.Msg, Ext.emptyFn);
                           },
                  failure: function (response) {
                              Ext.Viewport.unmask();
                              Ext.Msg.alert("提示", "操作失敗,請(qǐng)檢查網(wǎng)絡(luò)!", Ext.emptyFn);
                           }
});

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品国产一区二区三区性色av | 国产伦精品一区二区三区四区视频 | 久久精品99国产精品亚洲最刺激 | 国产视频久久 | 久久韩日 | 国产精品久久久久久久久久久久 | 日韩精品 电影一区 亚洲 | 久久人体| 91性高湖久久久久久久久_久久99 | 欧美精品第一页 | 黄色片在线 | av成人在线观看 | 欧美一区二区三区精品免费 | 中文字幕一区二区三区四区五区 | 国产亚洲女人久久久久毛片 | 欧美午夜视频在线观看 | 日韩精品1区2区3区 99久久视频 | 亚洲欧洲中文日韩 | 一区二区三区四区在线视频 | 视频一区免费观看 | 狠狠av | 欧美黄视频在线观看 | www.精品 | 久久久久久久久久久网站 | 一区在线看 | 天天操网 | 日韩欧美一区二区三区久久婷婷 | 九草av| 国产第一毛片 | 欧美一级在线观看 | 国产精品自拍99 | 人人爽人人做 | 九九精品视频在线 | 久久久久网站 | 亚洲 中文 欧美 日韩 在线观看 | 国产欧美精品一区二区色综合朱莉 | 人人草人人 | 国产suv精品一区 | 久久首页| 久久精品国产99国产精品 | 青青草国产 |