This article is currently in the process of being translated into Vietnamese (~99% done).
Introduction
Khoảng thời gian trước đây, khi mà PHP và ASP thống trị thế giới thì chuyện giải quyết vấn đề về query string vẫn xảy ra như cơm bữa! Các bạn lấy input từ URL thông qua query string rồi trả về nội dung tương ứng. Phần lớn các công việc trên đã được tóm gọn lại bởi vị thần ASP.NET MVC framework của chúng ta - ví dụ : -tham số từ query string được tự động chuyển về dạng an toàn ( type-safe parameters) trên actions Controller của bạn hay thông tin trả về thông qua FORM có thể tự động chuyển về dạng Model objects.
Tuy nhiên, Các bạn sẽ sớm gặp phải những tình huống khiến các bạn phải nghiên cứu đến những tầng thấp hơn và tiến gần hơn đến kỹ thuật xử lý đa tác vụ HTTP pipeline . Việc này thực sự hữu ích mỗi khi bạn muốn truy cập trực tiếp đến thông tin FORM hoặc query string, ngay cả khi các bạn cần phải giải quyết những thứ liên quan đến cookies/sessions và response headers. ASP.NET MVC khiến mọi thứ trở nên đơn giản hơn, giúp bạn truy cập được tất cả các chức năng có liên quan của HTTP bằng việc gom tất cả vào trong HttpContext class.
Truy cập HttpContext
HttpContext class có thể được truy cập từ tất cả các Controllers. Để thuận tiện, các bạn có thể truy cập HttpContext từ property HttpContext . được khai báo trong Controllers của bạn. Thậm chí, một vài property của HttpContext class còn được xem như những property ở Controller e.g. Request property.
Truy cập vào HttpContext từ bất cứ đâu ngoài Controller của bạn thì đều không được khuyến khích. Với phiên bản trước của ASP.NET MVC framework thì mọi chuyện đơn giản hơn, sử dụng HttpContext property hiện tại, nhưng nó đã bị xóa bỏ trong ASP.NET Core, vì đơn giản là nó xâm phạm các nguyên tắc chính của mô hình MVC. Tuy nhiên, nếu bạn thực sự cần phải làm việc với nó ,(e.g. support hệ thống cũ) thì chúng tôi gợi ý bạn nên xem cái này StackOverflow thread nó sẽ cho bạn thêm chút thông tin .
Cấu Trúc HttpContext
Có khá nhiều thuộc tính và phương thức có mối liên hệ với kĩ thuật HTTP pipeline , nên để thuận tiện thì các thành phần của HttpContext class được chia thành nhiều đối tượng mà các bạn có thể sử dụng như một thuộc tính trong class. Dưới đây là danh sách vài thuộc tính mà các bạn sẽ sử dụng nhiều nhất :
- HttpContext.Request - Tất cả các thành phần đều liên quan với request hiện tại, e.g. QueryString, Forms
- HttpContext.Response - Tất cả các thành phần đều liên quan đến Response về sự chuyển giao, e.g. Cookies và response headers
- HttpContext.Session - Tất cả các thành phần đều liên quan đến việc xử lý Session (đại khái là sử dụng dữ liệu ổn định giữa các requests)
- HttpContext.User - Tất cả các thành phần đều liên quan việc xử lý chứng thực user
Trong phần tới, chúng tôi sẽ đi sâu hơn vào mỗi đối tượng và chia sẻ về chức năng quan trọng nhất của chúng.
Tóm tắt
HttpContext class cho phép bạn tiến gần hơn với kĩ thuật HTTP pipeline và tự xử lý những vấn đề ở tầng thấp hơn e.g. QueryString và Cookies.