在 ASP.NET 應用程式中,Response 與 Request 是兩個最基礎也最重要的內建物件,它們分別代表伺服器端與用戶端之間的雙向通訊管道。
Response 物件負責將伺服器處理的結果傳送回瀏覽器。常用成員包括:
Request 物件封裝了用戶端送來的所有 HTTP 請求資訊。常用集合:
Request.Form["key"])。Request.QueryString["key"])。以下示範典型的「登入頁 → 驗證 → 重導向至主頁」流程,展示 Request 取值與 Response 導向/輸出的配合。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="Demo.Login" %>
<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
<head runat="server">
<title>使用者登入</title>
</head>
<body>
<form id="form1" runat="server" method="post">
<div>
<label>用戶名:<asp:TextBox ID="txtUser" runat="server" /></label>
<br />
<label>密碼:<asp:TextBox ID="txtPwd" runat="server" TextMode="Password" /></label>
<br />
<asp:Button ID="btnLogin" runat="server" Text="登入" OnClick="btnLogin_Click" />
<asp:Label ID="lblMsg" runat="server" ForeColor="Red" />
</div>
</form>
</body>
</html>
using System;
using System.Web.UI;
namespace Demo
{
public partial class Login : Page
{
protected void btnLogin_Click(object sender, EventArgs e)
{
// 從 Request.Form 取得 POST 表單值
string user = Request.Form["txtUser"] ?? string.Empty;
string pwd = Request.Form["txtPwd"] ?? string.Empty;
// 簡易驗證(實務應改用雜湊比對、參數化查詢)
if (user == "admin" && pwd == "123456")
{
// 登入成功:用 Response.Redirect 攜帶查詢字串跳轉
Response.Redirect($"Main.aspx?user={Server.UrlEncode(user)}");
}
else
{
// 登入失敗:直接寫入錯誤訊息
Response.Write("<script>alert('帳號或密碼錯誤');</script>");
// 或 lblMsg.Text = "帳號或密碼錯誤";
}
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 從 QueryString 取得登入傳遞的參數
string user = Request.QueryString["user"] ?? "訪客";
Response.Write($"<h2>歡迎 {Server.HtmlEncode(user)} 登入系統</h2>");
}
}
Server.HtmlEncode 或 HttpUtility.JavaScriptStringEncode 防止 XSS 攻擊。| 舊寫法 | 建議現代寫法 | 說明 |
|---|---|---|
Request.Form.Get("key") | Request.Form["key"] 或 Request["key"] | 索引器更簡潔,自動回傳 null 而非拋出例外 |
Response.Write("<script>...</script>") | ClientScript.RegisterStartupScript 或前端 AJAX | 避免阻塞頁面渲染,維護性更好 |
Response.Redirect("url", true) | Response.Redirect("url", false); Context.ApplicationInstance.CompleteRequest(); | 避免 ThreadAbortException,效能較佳 |
掌握 Response/Request 物件是 ASP.NET 開發的入門功力。實務上建議搭配 Model Binding、Filter/Attribute、Middleware (ASP.NET Core) 等進階機制,將底層 HTTP 細節封裝,專注於商業邏輯開發。