Ngôn ngữ ASP.NET - Đối tượng Request

Đối tượng Request trong ASP.NET

 Đối tượng Request được dùng để nhận những thông tin từ trình duyệt của người dùng gởi về cho Web Server. Những thông tin này gồm các thông số của Form khi được Submit dùng phương thức POST hoặc GET hay các tham số được ghi cùng với trang ASP.NET trong lời gọi đến trang đó.
Dùng đối tượng Request có thể chia sẻ thông tin qua lại giữa các trang ASP.NET trong một ứng dụng và để lấy giá trị các Cookie lưu trữ trên máy Client.
Mô hình gửi/đọc giá trị:


Các thành phần (thuộc tính và phương thức) chính :

Phương thức / thuộc tính Diễn giải
AccepTypes Trả về mảng chuỗi của MIME được hỗ trợ bằng trình khách
ApplicationPath Trả về đường dẫn ảo của ứng dụng
BinayRead Trả về mảng Byte chứa đựng thông tin nhị phân gởi đến Server
Browser Trả về đối tượng HttpBrowserCapabilities trình bày thông tin của trình duyệt
ClientCertificate Trả về đối tượng HttpClientCertificate
ContentEncoding Tập kí tự của thực thể Body
ContentLength Chiều dài tính bằng byte của yêu cầu
ContentType Loại MILE của yêu cầu
Cookies Trả về đối tượng HttpCookiesCollection
Filepath Trả về đường dẫn ảo của yêu cầu
Files Trả về HttpFileCollection của tập nhiều tập tin được tải lên Server
Form Trả về tập dữ liệu của nội dung từ Form
Header Trả về tập dữ liệu của nội dung từ HTTP Header
HttpMethod Trả về phương thức HTTP sử dụng cho yêu cầu
InputStream Là luồng dữ liệu chứa đựng các Input của Form
Params Lấy giá trị của phương thức trong Form, QueryString
Path Đường dẫn ảo của yêu cầu
PathInfo Đường dẫn ảo của yêu cầu
PhysicalPath Đường dẫn vật lí của yêu cầu
QueryString Trả về một tập dữ liệu của nội dung từ QueryString
RawURL URL của yêu cầu
RequestType Phương thức HTTP sử dụng cho Resquest
TotalByte Dung lượng của Stream trong luồng dữ liệu
URL Đối tượng URL chứa đựng chi tiết của yêu cầu
UserHostName Tên DNS của người sử dụng
MapPath Chuyển đổi đường dẫn ảo thành đường dẫn vật lý
SaveAs Lưu yêu cầu HTTP vào đĩa

 Có 2 cách để gởi thông tin đặc biệt từ trình duyệt đến Web server, đó là thông tin từ phần <FORM> trong trang được đưa vào HTTP header hay được đưa trực tiếp vào chuỗi truy vấn trong địa chỉ liên kết URL. Đó chính là vai trò của 2 tập hợp QueryString và Form của đối tượng Request 

  • Request.QueryString.Get("Tên_Tham_So") hoặc Request.QueryString["Tên_Tham_So"]:Khi đó thuộc tính của <FORM> phải được dùng là METHOD = GET.
  • Request.Form.Get("Tên_Tham_So") hoặc Request.Form["Tên_Tham_So"]: Khi đó thuộc tính của <FORM> phải được dùng là METHOD = POST.

 Chú ý: Có thể dùng Request.Form.GetValues và Request.Form.GetValues để đọc.

So sánh giữa hai tập hợp Form và QueryString:

  • Theo phương pháp dùng QueryString có hạn chế đó là giới hạn chiều dài của chuỗi địa chỉ URL (khoảng 1000 kí tự) đây chính là yêu cầu của giao thức HTTP. Do đó sẽ rất phiền phức khi có yêu cầu gởi đi quá dài. Mặc khác, giá trị mà ta gởi đi được hiển thị rõ ràng trong ô địa chỉ URL trên trình duyệt máy Client nên dễ dàng bị người khác đọc được.
  • Phương pháp dùng POST đã khắc phục được nhược điểm trên bằng cách đưa dữ liệu vào trong phần Header của HTTP.
     

1. Phương thức QueryString của Request:
Để đọc giá trị của một phần tử được gửi theo phương thức Get (Method = "Get") hoặc Hyperlink. Như ta đã biết qua bài các khái niệm cơ bản trong web giao thức HTTP xác định qua URLs với cấu trúc dạng sau: 

http:// <host> [: <post>] [ <path> [? < QueryString >] ]

Do đó phần cuối là phần QueryString dùng để chứa các tham số (sau dấu "?") với cấu trúc như sau:

[?Tham_so_1=gia_tri_1[&Tham_so_2=gia_tri_2[&....]]]

Ví dụ: http://localhost:48908/RequestDemoHyperlink.aspx?txtname=hiepsiit&url=http://www.hiepsiit.com

Để đọc giá trị của một phần tử được gửi theo phương thức Get (Method = "Get") hoặc Hyperlink theo cú pháp sau:
Cú pháp:

Request.QueryString.Get("Tên_Tham_So") 

Hoặc

Request.QueryString["Tên_Tham_So"]:

Ví dụ: Tạo trang web RequestDemoHyperlink.aspx :

Code RequestDemoHyperlink.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RequestDemoHyperlink.aspx.cs" Inherits="RequestDemoHyperlink" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/RequestDemoHyperlink.aspx?txtname=hiepsiit&amp;url=http://www.hiepsiit.com">Hiệp Sĩ IT </asp:HyperLink>
        <br />
        <br />
        <asp:Label ID="lblNotice" runat="server"></asp:Label>
    
    </div>
    </form>
</body>
</html>

Code behind  RequestDemoHyperlink.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class RequestDemoHyperlink : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        lblNotice.Text = "<h1>Tên: "+Request.QueryString["txtname"] + " URL:"+Request.QueryString.Get("url") +"</h1>";
    }
}

Thực thi trang web cho kết quả:

Click vào link Hiệp Sĩ It cho kết quả:

2. Phương thức Form của đối tượng Request

Để đọc giá trị của một phần tử được gửi theo phương thức Post (Method = "Post").

Cú pháp :

Request.Form.Get("Tên_Tham_Số");

Hoặc

Request.Form["Tên_Tham_Số"];

Ví dụ: Tạo dựng 2 trang web : trang Login.aspx, trong đó có 2 textbox chứa tên và mật khẩu. Khi người dùng click vào nút submit thì gửi username và mật khẩu sang trang Dologin.aspx để hiển thị.

Code trang Login.apsx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .auto-style1 {
            width: 61px;
        }
        .auto-style2 {
            width: 30px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <table style="width: 39%; border:groove">
            <tr>
                <td colspan="2" align="center"><b>Đăng nhập</b><hr /></td>
            </tr>
            <tr>
                <td class="auto-style2">Username:</td>
                <td class="auto-style1">
                    <asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td class="auto-style2">Password:</td>
                <td class="auto-style1">
                    <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td class="auto-style2">&nbsp;</td>
                <td class="auto-style1">
                    <asp:Button ID="btnLogin" runat="server" Text="Đăng nhập" Width="88px" PostBackUrl="~/DoLogin.aspx" />
                </td>
            </tr>
        </table>
    
    </div>
    </form>
</body>
</html>

Code trang DoLogin.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DoLogin.aspx.cs" Inherits="DoLogin" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">

        .auto-style1 {
            width: 61px;
        }
        .auto-style2 {
            width: 48px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <table style="width: 39%; border:groove"">
            <tr>
                <td colspan="2" align="center"><b>Thông tin đăng nhập</b><hr /></td>
            </tr>
            <tr>
                <td class="auto-style2">Username:</td>
                <td class="auto-style1">
                    <asp:Label ID="lblUsername" runat="server" Text="Label"></asp:Label>
                </td>
            </tr>
            <tr>
                <td class="auto-style2">Password:</td>
                <td class="auto-style1">
                    <asp:Label ID="lblPassword" runat="server" Text="Label"></asp:Label>
                </td>
            </tr>
        </table>
    
    </div>
    </form>
</body>
</html>

Code behind trang DoLogin.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class DoLogin : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        lblUsername.Text    = Request.Form.Get("txtUsername");
        lblPassword.Text = Request.Form["txtPassword"];
    }
}

Thực thi code trên cho kết quả:

Nhập username password click vào đăng nhập