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

ASP.NET 編碼陷阱:Request.Form 自動解碼導致資料異常

     編輯:關於ASP.NET

ASP.NET 引擎預設會對表單資料自動編碼/解碼,若直接使用 Request.Form.ToString() 取得原始資料再編碼,會導致雙重編碼錯誤。

問題重現

Client POST 原始資料:a=1&b=2%2B3(%2B 為 + 編碼)。

伺服器端 Request.Form.ToString() 回傳已解碼字串 a=1&b=2+3。若再呼叫 Encoding.GetBytes 送出,+ 會被編碼為 %2B,導致接收端解碼錯誤。

正確做法

直接讀取 Request.InputStream 取得原始位元組:

byte[] bytesToPost = ReadFully(httpLocalRequest.InputStream);
private byte[] ReadFully(Stream input) {
    byte[] buffer = new byte[16 * 1024];
    using (MemoryStream ms = new MemoryStream()) {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0) {
            ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
    }
}

避開 ASP.NET 自動解碼機制,確保轉發資料完整性。適用於 Proxy、轉發、簽章驗證等需保留原始請求主體的情境。

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