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.
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&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"> </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 và password click vào đăng nhập