HttpRequest 封裝客戶端 HTTP 請求,提供表單資料、查詢字串、Cookie、伺服器變數、上傳檔案、瀏覽器資訊等存取管道。
| 屬性 | 用途 |
|---|---|
Form | POST 表單集合 |
QueryString | GET 查詢字串集合 |
Params | QueryString+Form+Cookies+ServerVariables 合併集合 |
Cookies | 客戶端 Cookie 集合 |
Files | 上傳檔案集合 (HttpFileCollection) |
ServerVariables | 伺服器環境變數 (HTTP Header 等) |
Browser | 瀏覽器能力物件 (HttpBrowserCapabilities) |
Url / UrlReferrer | 請求 URL / 來源頁 URL |
UserHostAddress | 客戶端 IP |
HttpMethod | "GET" / "POST" 等 |
ApplicationPath | 應用程式虛擬根路徑 |
| 鍵 | 含義 |
|---|---|
REMOTE_ADDR | 客戶端 IP |
LOCAL_ADDR | 伺服器 IP |
HTTP_USER_AGENT | 瀏覽器 User-Agent 字串 |
HTTP_REFERER | 來源頁 URL (可偽造) |
SERVER_NAME | 伺服器主機名 |
URL | 請求虛擬路徑 |
透過 Request.Browser 取得 HttpBrowserCapabilities:
string browser = Request.Browser.Browser; // "Chrome", "IE", "Firefox"
string version = Request.Browser.Version; // "98.0.4758.102"
string platform = Request.Browser.Platform; // "WinNT"
bool isMobile = Request.Browser.IsMobileDevice;
bool supportsJs = Request.Browser.JavaScript;
bool supportsCookies = Request.Browser.Cookies;
Request.Cookies["name"] → HttpCookie 物件 → .Value 或 ["subKey"]。Response.Cookies["name"].Value = "val" 或 Response.Cookies.Add(new HttpCookie(...))。關鍵差異:Request 只能讀取瀏覽器送來的 Cookie;Response 寫入的 Cookie 會在**下一次請求**才出現在 Request 中。
// 登入按鈕 Click
if (txtUser.Text=="admin" && txtPwd.Text=="123")
{
Response.Cookies["UserName"].Value = txtUser.Text;
Response.Cookies["Password"].Value = txtPwd.Text;
if (ddlRemember.SelectedValue=="Forever")
{
Response.Cookies["UserName"].Expires = DateTime.MaxValue;
Response.Cookies["Password"].Expires = DateTime.MaxValue;
}
}
// Page_Load 自動填入
if (!IsPostBack)
{
if (Request.Cookies["UserName"] != null)
txtUser.Text = Request.Cookies["UserName"].Value;
}
Request 物件是伺服器端感知客戶端的唯一窗口。熟悉其屬性分類、集合搜尋順序、瀏覽器偵測與 Cookie 讀寫分工,能避免常見的「抓不到值」、「編碼錯誤」、「瀏覽器相容」等坑。