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

ASP.NET Response 與 Request 物件完整使用指南

     編輯:ASP.NET 基礎

核心概念解析

在 ASP.NET 應用程式中,Response 與 Request 是兩個最基礎也最重要的內建物件,它們分別代表伺服器端與用戶端之間的雙向通訊管道。

Response 物件:伺服器向用戶端輸出

Response 物件負責將伺服器處理的結果傳送回瀏覽器。常用成員包括:

  • Redirect(url):執行用戶端重導向,瀏覽器會發起新的 HTTP 請求到指定 URL。
  • Write(string):直接向輸出流寫入字串,常用於動態生成 HTML 或除錯訊息。
  • ContentType:設定回應的 MIME 類型(如 application/json、image/jpeg)。
  • Headers:操作 HTTP 回應標頭,如設定快取策略、CORS 等。

Request 物件:用戶端向伺服器提交資料

Request 物件封裝了用戶端送來的所有 HTTP 請求資訊。常用集合:

  • Form:取得 POST 表單提交的欄位值(Request.Form["key"])。
  • QueryString:取得 URL 查詢字串參數(Request.QueryString["key"])。
  • Cookies、Headers、ServerVariables:分別存取 Cookie、請求標頭、伺服器變數(如 USER_AGENT、REMOTE_ADDR)。
  • Files:處理 multipart/form-data 檔案上傳。

實戰範例:簡易登入流程

以下示範典型的「登入頁 → 驗證 → 重導向至主頁」流程,展示 Request 取值與 Response 導向/輸出的配合。

1. 登入頁面 (Login.aspx)

<%@ 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>

2. 後端邏輯 (Login.aspx.cs)

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 = "帳號或密碼錯誤";
            }
        }
    }
}

3. 主頁面 (Main.aspx.cs)

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 攻擊。
  • 敏感資料勿放 QueryString:密碼、Token 等應走 POST 或加密 Cookie,避免出現在 URL、伺服器日誌、瀏覽器歷史紀錄中。
  • 驗證所有輸入:Request 取得的資料皆為不可信來源,必須驗證長度、格式、型別。

常見替代寫法

舊寫法建議現代寫法說明
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 細節封裝,專注於商業邏輯開發。

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