首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# HttpWebRequest 完整指南:POST/GET、SOAP、串流處理與錯誤處理

     編輯:關於C#

基本請求流程


var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Credentials = CredentialCache.DefaultCredentials;

byte[] payload = Encoding.UTF8.GetBytes(postData);
request.ContentLength = payload.Length;

using (var reqStream = request.GetRequestStream())
    reqStream.Write(payload, 0, payload.Length);

using (var response = (HttpWebResponse)request.GetResponse())
using (var respStream = response.GetResponseStream())
using (var reader = new StreamReader(respStream, Encoding.UTF8)) {
    string result = reader.ReadToEnd();
    // 處理結果
}

關鍵屬性與設定

屬性用途範例
MethodHTTP 動詞"POST", "GET", "PUT", "DELETE"
ContentType請求內容格式"application/json", "text/xml", "multipart/form-data"
Headers自訂標頭request.Headers["Authorization"] = "Bearer token"
Timeout逾時毫秒30000 (預設 100秒)
UserAgent用戶代理字串"MyApp/1.0"
KeepAlive連線重用true (預設)
AllowAutoRedirect自動追蹤 3xxtrue (預設)
CookieContainerCookie 管理new CookieContainer()

SOAP 請求範例


var req = (HttpWebRequest)WebRequest.Create(soapEndpoint);
req.Method = "POST";
req.ContentType = "text/xml; charset=utf-8";
req.Headers.Add("SOAPAction", "https://tempuri.org/MyMethod");

var soapXml = @"...";
byte[] body = Encoding.UTF8.GetBytes(soapXml);
req.ContentLength = body.Length;

using (var stm = req.GetRequestStream()) stm.Write(body, 0, body.Length);

using (var resp = (HttpWebResponse)req.GetResponse())
using (var stm = resp.GetResponseStream())
using (var reader = new StreamReader(stm, Encoding.UTF8)) {
    var soapResponse = reader.ReadToEnd();
    // 解析 XML 回應
}

串流儲存二進位檔案


using (var resp = (HttpWebResponse)request.GetResponse())
using (var respStream = resp.GetResponseStream())
using (var fileStream = File.Create(localPath)) {
    var buffer = new byte[8192];
    int read;
    while ((read = respStream.Read(buffer, 0, buffer.Length)) > 0)
        fileStream.Write(buffer, 0, read);
}

錯誤處理與重試策略

  • 捕獲 WebException,檢查 Response 屬性取得 HTTP 狀態碼
  • 網路暫時性錯誤(5xx、408、Timeout)實作指數退避重試(Polly 套件)
  • 驗證 HttpWebResponse.StatusCode == HttpStatusCode.OK 才處理內容
  • 釋放回應串流:using 確保 GetResponseStream() 被正確關閉,避免連線洩漏

現代替代:HttpClient

.NET Core / .NET 5+ 建議使用 HttpClient(單例模式、非同步優先、自動解壓縮、支援 HttpRequestMessage 完整控制)。HttpWebRequest 仍適用於 .NET Framework 老專案維護。

ASP 經典 XMLHTTP 參考

舊版 ASP 使用 Server.CreateObject("MSXML2.XMLHTTP") 同步發送,現已淘汰,僅供維舊參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved