asp.net中WebResponseクロスドメイン訪問の実例コード


先日、ある友達にasp.netでaspのページを訪問して、データを相手のデータベースに提出した後、戻りの値(戻り値:OKまたはERROR)によって、OKであれば地元のデータベースに記入してくださいという手順を書いてもらいました。当时はもちろん、简単だと思いましたが、jsのxmlhttpを使って、レスポンスの値によっては「OK」であれば、ローカルデータベースを提出します。すぐに書き上げて送ります。友達に試してみたらだめです。その後聞いたら、ドメインをまたいで訪問したので、無視しました。そこで友達にaspをweb serviceに変えてもらいました。でも、プログラムは協力会社が作ったのです。aspだけできます。web serviceは使えません。仕方がないです。asp.netのWebResonseを出すしかないです。多くのウェブサイトの収集プログラムはこれを使います。第一版は書き終わりました。ドメインを越えて訪問することができます。文字化けです。コードに関する方法を調整して、やっといいです。この応用は小さいですが、関連する知識点が多いです。
1、xmlhttpはドメインを越えて提出することができません。
もちろんXMLttpRequestは、適切な解決方法です。
2、webreesponseはクロスドメイン訪問ができますが、注意してください。
1)、getとpostの違い。2)Timeoutの問題に注意する。
これらは簡単なプログラムです。メモして忘れます。上級者は見なくてもいいです。
もういいです。次は関連コードです。

/// <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も同様にjsonのデータ方式の呼び出しをサポートしています。
クライアントJQuery.ajaxの呼び出しコード例:

$.ajax({
 type : "get",
 async:false,
 url : "https://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"];
 context.Response.Write(callbackFunName + "([ { name:"John"}])");
}
jquery.get Script方式で処理する原理は似ていますが、同じようにサーバーがデータに戻り、サポートをする必要があります。calbackのfunction呼び出しを返すのではなく、その結果を直接転送を要求する変数名に割り当てます。クライアントは、外部のスクリプトを導入するように戻りデータをロードします。