萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> asp.net編程 >> asp.net中WebResponse 跨域訪問實例代碼

asp.net中WebResponse 跨域訪問實例代碼

 一篇朋友很久前寫的asp.net中WebResponse 跨域訪問示例,下面我轉過來與大家一起學習學習,希望文章對大家會有幫助

前兩天,一個朋友讓我幫他寫這樣一個程序:在asp.net裡面訪問asp的頁面,把數據提交對方的數據庫後,根據返回的值(返回值為:OK或ERROR),如果為OK再把填入本地數據庫。當時,想當然,覺得很簡單,用js的xmlhttp ,如果根據response 的值是“OK”就執行提交本地數據庫。很快寫完發過去,讓朋友試試,一試發現不行,後來一問,原來是跨域訪問,我給忽略了,於是讓朋友把asp改成web service,可朋友說程序是合作公司做的,只會asp,不會用web service ,狂暈ing。沒辦法,只能請出asp.net的 WebResponse了,很多網站采集程序都是用這個。第一版寫完了,倒是可以跨域訪問了,不過是亂碼,調整有關編碼的方式,終於可以了。這個應用雖小可是涉及的知識點不少:   1、xmlhttp 不能跨域提交。   當然XMLHttpRequest還是權宜的解決的方法,   2、webresponse可以進行跨域訪問,不過要注意   1)、get和post的區別。 2)、注意Timeout的問題。   這些都是簡單的程序,記下來備忘,高手就不必看了。   不廢話了,下面是相關的c#代碼:    代碼如下: /// <summary>         /// 使用Post方法發送數據         /// </summary>         /// <param name=”pi_strPostURl”>提交地址</param>         /// <param name=”pi_strParm”>參數</param>         /// <returns></returns>                public static string PostResponse(string pi_strPostURl, string pi_strParm)         {             try             {                 //編碼                 Encoding t_Encoding = Encoding.GetEncoding(“GB2312“);          Uri t_Uri = new Uri(pi_strPostURl);                               byte[] paramBytes = t_Encoding.GetBytes(pi_strParm);                 WebRequest t_WebRequest = WebRequest.Create(t_Uri);         t_WebRequest.Timeout = 100000;                 //設置ContentType                 t_WebRequest.ContentType = “application/x-www-form-urlencoded“;                   t_WebRequest.Method = EnumMethod.POST.ToString();                //初始化                 using (Stream t_REStream = t_WebRequest.GetRequestStream())                 {                     //發送數據                     requestStream.Write(paramBytes, 0 , paramBytes.Length);                 }                   WebResponse t_WebResponse =  t_WebRequest.GetResponse();                   using (StreamReader t_StreamReader = new StreamReader(t_WebResponse .GetResponseStream(), t_Encoding))                 {                     return t_StreamReader.ReadToEnd();                 }             }             catch             {                 return “ERROR“;             }         }   public static string GetResponse(string pi_strPostURl, string pi_strParm)         {             try             {                 //編碼                 Encoding t_Encoding = Encoding.GetEncoding(“GB2312“);                                Uri t_Uri = new Uri(string.Format(“{0}?{1}“, pi_strPostURl, pi_strParm));                   WebRequest t_WebRequest =  WebRequest.Create(t_Uri);                   t_WebRequest.Timeout = 100000;                 t_WebRequest.ContentType = “application/x-www-form-urlencoded“;                   t_WebRequest.Method = EnumMethod.GET.ToString();                   WebResponse t_WebResponse =  t_WebRequest.GetResponse();                   using (StreamReader t_StreamReader = new StreamReader(t_WebResponse.GetResponseStream(), t_Encoding))                 {                     return t_StreamReader.ReadToEnd();                 }             }             catch (Exception e)             {                 return e.ToString();             }         } public static string AtionResponse(string pi_Url, EnumMethod pi_Method)         {              string t_strUrlPath=“”;              string t_parm = “”;                          Uri  t_Url = new Uri(pi_Url);                              t_parm= t_Url.Query;              if (parmString.StartsWith(“?“))                     t_parm = t_parm.Remove(0, 1);                              t_strUrlPath = “http://“ + t_Url .Authority + t_Url .AbsolutePath;              return GetResponse(t_strUrlPath, t_parm, pi_Method);         }  public enum EnumMethod         {             POST,             GET         }     現在jquery ajax支持跨域了,下面看個實例我們可對上面進行處理成json數據即可   JQuery.getJSON也同樣支持jsonp的數據方式調用。   客戶端JQuery.ajax的調用代碼示例:    代碼如下: $.ajax({  type : "get",  async:false,  url : "http://www.jb51.net/ajax.do",  dataType : "jsonp",  jsonp: "callbackparam",//服務端用於接收callback調用的function名的參數  jsonpCallback:"success_jsonpCallback",//callback的function名稱  success : function(json){   alert(json);   alert(json[0].name);  },  error:function(){   alert('fail');  } });       服務端返回數據的示例代碼:    代碼如下: public void ProcessRequest (HttpContext context) {  context.Response.ContentType = "text/plain";  String callbackFunName = context.Request["callbackparam"];
copyright © 萬盛學電腦網 all rights reserved