169418 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

ASP.NET Method=POST

ASP.NET method=POST
ASP.NETでPOSTしたデータを引き取る方法についてのメモ。

実験環境
クライアントはC#で記述したWinアプリ。
サーバーはIIS上に構築したASP.NETのWebページ。


■クライアント側のプログラム
	クライアント側のプログラムでは、WebRequestを使ってPOSTしてみた。
	データはWebRequestから取得したストリームに対して書き込みを行うことでサーバーへ渡される。
	MethodはもちろんPOST。

【関数】
	public string Post(string Url,string PostData)
	引数にURL、POSTするデータを指定する。

【引数】
	■string Url
		URLにはQuery文字列を含ませても良い。
		例)string url="http://myserver/req.aspx?cmd=10&opt=0";

	■string PostData
		POSTするデータはそのまま送られるので、漢字を含む文字列の場合UrlEncodeを行う必要がある。
	
		System.Text.Encoding encode =System.Text.Encoding.GetEncoding("shift_jis");
		// 文字列をエンコード
		string data=System.Web.HttpUtility.UrlEncode("サンプル文字列", encode);
		// POSTする。
		Post(url,data);

【戻り値】	
	応答したページのレスポンス。
	
【コード】

	public string Post(string Url,string PostData)
	{
		//PostDataをバイト型配列に変換
		byte[] dBytes = System.Text.Encoding.ASCII.GetBytes(PostData);

		//WebRequestの作成
		HttpWebRequest webreq =(HttpWebRequest) WebRequest.Create(Url);

		//MethodにPOSTを指定
		webreq.Method = "POST";

		//ContentTypeの指定
		webreq.ContentType = "application/x-www-form-urlencoded";
            
		// 出力ストリームを取得し、データを書き込む。
		webreq.ContentLength = postDataBytes.Length;
		System.IO.Stream rs = webreq.GetRequestStream();
		rs.Write(dBytes, 0, dBytes.Length);
		rs.Close();

		//応答の受信のためのWebResponseを取得
		HttpWebResponse webres =(HttpWebResponse) webreq.GetResponse();

		//応答データの受信のためのStreamを取得
		Stream st = webres.GetResponseStream();
		StreamReader sr = new StreamReader(st, Encoding.GetEncoding("shift_jis"));

		//受信データの取得。
		string aspx = sr.ReadToEnd();
		sr.Close();
		return aspx;
	}

■サーバー側のプログラム
	サーバーではPOSTされたデータは標準入力にあるので、これを引き取ればOK。
	サーバー側のプログラムは、意外に簡単。
	PageのRequestオブジェクトを利用してデータを取得する。

【関数】
	private string GetPostData()
	引数はなし。

【戻り値】
	取得したデータを文字列にして戻り値とする。
	何も入っていない場合はnullを返す。

【コード】
	private string GetPostData()
	{
		int len=Request.ContentLength;
		if( len != 0)
		{	byte[] bdata=Request.BinaryRead(len);
			string Data =System.Text.Encoding.ASCII.GetString(bdata);
			return Data;
		}
		return null;
	}

【解説】
	PageオブジェクトにはRequestオブジェクトが公開されているので、これを利用する。
	RequestのContentLengthプロパティに、POSTされたデータの長さが入っている。
	データはBinaryReadを使って一旦バイト配列へ格納する。
	これをTextクラスのEncodingを使って文字列へ変換する。
	
	POSTしたデータがUrlEncodeされている場合は、UrlDecodeを行う必要がある。
	例)
	string Data=GetPostData();
	if( Data != null)
	{	Data=Server.UrlDecode(Data);
	}



© Rakuten Group, Inc.
X