asp.net中WebResponseクロスドメイン訪問の実例コード
5271 ワード
先日、ある友達に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の問題に注意する。
これらは簡単なプログラムです。メモして忘れます。上級者は見なくてもいいです。
もういいです。次は関連コードです。
JQuery.getJSONも同様にjsonのデータ方式の呼び出しをサポートしています。
クライアントJQuery.ajaxの呼び出しコード例:
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呼び出しを返すのではなく、その結果を直接転送を要求する変数名に割り当てます。クライアントは、外部のスクリプトを導入するように戻りデータをロードします。