程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> ASP使用webRequest實現跨域請求,aspwebrequest跨域

ASP使用webRequest實現跨域請求,aspwebrequest跨域

編輯:關於.NET

ASP使用webRequest實現跨域請求,aspwebrequest跨域


前兩天突然有個需求需要用到跨域提交數據。之前也在網上找到了好多的代碼例子看了的。常用的是jsonp去實現跨域,但是jsonp值支持get方式提交。這樣就造成了問題,後來我同事告訴我可以用服務端去做也就是webRequest去實現。我自己研究了一下,實現了之後 來寫一篇文章總結一下我的經驗。

  希望也可以和你們分享一下。

 

首先是html頁面的數據傳輸,這個提交的方式我就不用講了,ajax  表單 都可以。重點在後台代碼怎麼去把數據傳輸到另外一個站點。

 

 1        public ActionResult OpenReadWithHttps(string username, string email, string sex)
 2         {
 3             string url = "https://***********************"; //這裡是你請求的地址 或者說是提供給你的接口,同時還又會提交的格式。
 4             var jss = new JavaScriptSerializer();//這個可以理解為把model變為一個json字符串
 6             var model = new UserModel();
 7           //實例化model 給model賦值,然後去調用。 9             model.Username = username;11             model.Email = email;13             model.Sex = sex;
19            string temp = HttpPost(url, jss.Serialize(model));
22             return Json(temp, JsonRequestBehavior.AllowGet);
23         }

接下的這段代碼才是重點。。

 

       private string HttpPost(string Url, string postDataStr)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentType = "application/json";

//request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr); //var str = Encoding.GetEncoding("UTF-8"); //request.ContentLength = str.GetByteCount(postDataStr);

Stream myRequestStream = request.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("UTF-8")); myStreamWriter.Write(postDataStr); myStreamWriter.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; }

  上面的這個方法就是把你的參數用webRequest的方式傳輸給對應的接口。

這個方法呢 我剛開始用的是gbk2312的格式去提交到接口。提交後我這邊返回的是成功了。但是接口那邊保存的漢字就是一堆亂碼。。然後就改成UTF-8

改成UTF-8之後問題就來了,我這邊的數據就傳輸不過去了。。當時就跪在這裡了。到網上找了半天 也沒找到自己想要的答案。然後我就嘗試的注釋的那三行轉化格式的代碼(就上面那個方法注釋的).

沒想到 注釋之後居然成功了。。果然運氣也是實力的一部分。。然後又去找為何把值轉換之後會出錯。。答案就是 字符串轉換的時候長度居然會丟失。會丟失。。丟失。。失。。也就是會比未轉換之前少幾個字節。。於是就提交不了了。。。

其實這個做一遍之後感覺還是聽簡單的。跨域提交請求感覺逼格有點高 其實就那樣。

(希望這篇文章對你們有幫助)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved