先看客戶端Http請求之HttpWebRequest
using System.IO; using System.Net; using System.Text; public class HttpHelper { public static string Request(string data, string url) { return Request(Encoding.GetEncoding("UTF-8").GetBytes(data), url); } public static string Request(byte[] data, string url) { string result = string.Empty; //創建一個客戶端的Http請求實例 HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; request.ContentLength = data.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(data, 0, data.Length); requestStream.Close(); //獲取當前Http請求的響應實例 HttpWebResponse response = request.GetResponse() as HttpWebResponse; Stream responseStream = response.GetResponseStream(); using (StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"))) { result = reader.ReadToEnd(); } responseStream.Close(); return result; } }
data是待傳入的Http實體主體的內容,例如在進行微信支付統一下單時需要傳遞給微信端的Xml字符串,不傳可以寫空字符串"";url是所請求的Http地址,例如https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx78b0b7。
與客戶端Http請求類HttpWebRequest相對的服務端Http請求類是HttpRequest。HttpApplication、HttpContext、Page、UserControl類的Request屬性都是HttpRequest類的實例。HttpRequest類使得Asp.Net能夠讀取客戶端(如瀏覽器或使用了HttpWebRequest類的客戶端程序)在Web請求期間發送的Http值。常見的Http值是客戶端以Get方式傳來的Url參數、Post方式提交過來的表單項和文件;不常見的Http值則是實體主體內容,例如前面關於HttpWebRequest介紹中提到在進行微信支付統一下單時需要向Http實體主體中寫入內容,不清楚微信端如何接收這個Http實體主體,但如果是Asp.Net來接收的話就用HttpRequest類的InputStream屬性,在微信支付成功后微信系統會回調商戶后台的一個特定接口文件以通知商戶后台當前訂單已支付完成,此處回調時微信系統會向該特定接口文件寫入了一個Xml字符串形式的實體主體內容,如下模擬一個Http實體主體內容的獲取:
客戶端:
HttpHelper.Request("<xml>data</xml>","http://www.xxx.com/test.aspx?key=value");
服務端:
StreamReader reader = new StreamReader(Request.InputStream);
string xmlStr = reader.ReadToEnd();