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

ASP.NET Get 與 Post 表單提交差異與接收方式完整解析

     編輯:ASP.NET 基礎

HTML 表單提交最基本的兩種方法是 **GET** 與 **POST**,ASP.NET 透過 `Request` 物件提供不同屬性接收資料。本文詳細比較兩者差異、程式碼接收寫法、安全性與適用場景。

一、前端表單標記差異


<!-- GET 表單 -->
<form id="form1" method="get" runat="server">
    姓名:<asp:TextBox ID="name" runat="server" /><br />
    網站:<asp:TextBox ID="website" runat="server" /><br />
    <asp:Button ID="Button1" Text="送出" runat="server" />
</form>

<!-- POST 表單 -->
<form id="form2" method="post" runat="server">
    姓名:<asp:TextBox ID="name2" runat="server" /><br />
    網站:<asp:TextBox ID="website2" runat="server" /><br />
    <asp:Button ID="Button2" Text="送出" runat="server" />
</form>

URL 表現差異:

  • GET:`https://localhost/page.aspx?name=John&website=example.com`(參數顯示於網址列)
  • POST:`https://localhost/page.aspx`(參數在 HTTP Body,網址列不變)

二、後端接收程式碼

1. 專屬接收(明確區分)


// 僅接收 GET
protected void Page_Load(object sender, EventArgs e)
{
    string name = Request.QueryString["name"];
    string site = Request.QueryString["website"];
    Response.Write($"GET: {name}, {site}
Method: {Request.RequestType}"); } // 僅接收 POST protected void Page_Load(object sender, EventArgs e) { string name = Request.Form["name2"]; string site = Request.Form["website2"]; Response.Write($"POST: {name}, {site}
Method: {Request.RequestType}"); }

2. 通用接收(同時支援 GET/POST)


// 寫法 A:Request.Params(合併 QueryString、Form、Cookies、ServerVariables)
string name = Request.Params["name3"];
string site = Request.Params["website3"];

// 寫法 B:Request 索引器(同 Params,簡寫)
string name = Request["name4"];
string site = Request["website4"];

搜尋優先順序: `QueryString` → `Form` → `Cookies` → `ServerVariables`。同名參數以最先找到者為準。

三、GET vs POST 核心差異總表

比較項目GETPOST
語意從伺服器**獲取**資料(冪等、安全)向伺服器**提交**資料(非冪等、可能改變狀態)
資料位置URL 查詢字串(`?key=val&...`)HTTP Request Body
可見性網址列明顯可見,可書籤、分享一般使用者不可見(開發工具可見)
資料長度限制受瀏覽器/伺服器 URL 長度限制(~2KB~8KB)理論無上限(受 `maxRequestLength`、IIS 設定影響)
安全性低(記錄在歷史、Proxy、伺服器 Log)較高(不在 URL,但非加密仍可攔截)
快取行為瀏覽器/Proxy 可能快取預設不快取
回退/重新整理無副作用(通常安全)瀏覽器會警告「重新提交表單」
編碼方式`application/x-www-form-urlencoded`(URL 編碼)同 GET 或 `multipart/form-data`(上傳檔案)

四、ASP.NET 接收屬性速查表

| 屬性 | 來源 | 適用情境 | |------|------|----------| | `Request.QueryString["key"]` | URL QueryString | 明確只取 GET 參數 | | `Request.Form["key"]` | Request Body (POST) | 明確只取 POST 表單欄位 | | `Request.Params["key"]` | 合併集合 | 不在乎來源,統一取值 | | `Request["key"]` | 同 `Params` | 簡寫,常用於快速開發 |

五、最佳實務建議

  1. 查詢、搜尋、篩選、分頁 → **GET**
    理由:可書籤、可分享 URL、符合 REST 語意、支援快取。
  2. 新增、修改、刪除、登入、上傳檔案、敏感資料 → **POST**
    理由:非冪等、資料不曝光於 URL、支援大量資料與檔案上傳。
  3. 包含機密資訊(密碼、Token、個資) → **強制 POST + HTTPS**
  4. CSRF 防護:POST 請求務必加入 Anti-Forgery Token(`@Html.AntiForgeryToken()` / `ValidateAntiForgeryToken`)。
  5. 避免在 GET 傳遞大量資料:超過 URL 長度限制會導致 404/400 錯誤。

六、常見誤區澄清

  • ❌ 「POST 就安全」 → **錯誤**。POST 只是不在 URL,若無 HTTPS 仍可被中間人攔截。
  • ❌ 「GET 不能傳中文」 → **錯誤**。瀏覽器會自動 URL 編碼,伺服端自動解碼,正常運作。
  • ❌ 「`Request["key"]` 效能差」 → **可忽略**。內部仍是查詢集合,效能差異微乎其微。

正確選擇 GET/POST 並搭配對應的 `Request` 屬性接收,是建構符合 HTTP 語意、安全且可維護 Web 應用的基礎。

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