01/10/2018, 17:32

Nhận dữ liệu đầu vào trong controller

Controller thường xuyên làm công việc nhận dữ liệu đầu vào như là chuỗi query, giá trị từ form đưa lên hoặc là những tham số được hệ thống route parse từ incoming url. Chúng ta có 3 cách chính để truy xuất vào các dữ liệu loại này: – Chiết từ tập hợp các đối tượng context – Có dữ liệu truyền ...

Controller thường xuyên làm công việc nhận dữ liệu đầu vào như là chuỗi query, giá trị từ form đưa lên hoặc là những tham số được hệ thống route parse từ incoming url. Chúng ta có 3 cách chính để truy xuất vào các dữ liệu loại này:
– Chiết từ tập hợp các đối tượng context
– Có dữ liệu truyền vào như là tham số của action
– Gọi tính năng model binding một cách tường minh

1. Lấy dữ liệu từ những đối tượng context

Những context object thông dụng

Thuộc tính Kiểu Mô tả
Request.QueryString NameValueCollection Những biến GET gửi cùng request
Request.Form NameValueCollection Những biến POST gửi cùng request
Request.Cookies HttpCookieCollection Những cookie do browser gửi cùng request này
Request.HttpMethod string Phương thức HTTP (như là GET hay POST) được sử dụng cùng request này
Request.Headers NameValueCollection Tập http header gửi cùng request này
Request.Url Uri Url được yêu cầu
Request.UserHostAddress string Địa chỉ IP của người yêu cầu làm request này
RouteData.Route RouteBase Route được chọn cho request này
RouteData.Values RouteDataDictionary Những tham số của route (Được chiết từ URL hoặc từ những giá trị mặc định)
HttpContext.Application HttpApplicationStateBase Nơi lưu trữ trạng thái ứng dụng
HttpContext.Cache Cache Nơi lưu trữ cache ứng dụng
HttpContext.Items IDictionary Nơi lưu trữ trạng thái cho request hiện tại
HttpContext.Session HttpSessionStateBase Lưu trữ trạng thái của phiên làm việc
User IPrincipal Thông tin chứng thực về người đăng nhập hệ thống
TempData TempDataDictionary Dữ liệu tạm thời cho người dùng hiện tại

Ví dụ

public ActionResult RenameProduct() { 
    // Access various properties from context objects 
    string userName = User.Identity.Name; 
    string serverName = Server.MachineName; 
    string clientIP = Request.UserHostAddress; 
    DateTime dateStamp = HttpContext.Timestamp; 
    AuditRequest(userName, serverName, clientIP, dateStamp, "Renaming product"); 
 
    // Retrieve posted data from Request.Form 
    string oldProductName = Request.Form["OldName"]; 
    string newProductName = Request.Form["NewName"]; 
    bool result = AttemptProductRename(oldProductName, newProductName); 
 
    ViewData["RenameResult"] = result; 
    return View("ProductRenamed"); 
} 

2. Sử dụng tham số của action
Chúng ta có thể chiết các dữ liệu đầu vào bằng cách dùng các đối tượng context như đoạn mã sau

public ActionResult ShowWeatherForecast(){ 
    string city = RouteData.Values["city"]; 
    DateTime forDate = DateTime.Parse(Request.Form["forDate"]); 
} 

Tuy nhiên, chúng ta có thể dùng dạng ngắn gọn bằng cách truyền như tham số của action

public ActionResult ShowWeatherForecast(string city, DateTime forDate){ 
} 

0