Tôi đã được hỏi một câu hỏi trong cuộc phỏng vấn rằng làm thế nào để thực hiện HTTP module
và HTTP handler
trong ASP.Net MVC
. Tôi biết rằng chúng được sử dụng trong ASP.Net để viết tiền xử lý trước khi trang aspx được gọi. Nhưng trong ASP.Net MVC chúng tôi có bộ lọc cho điều đó vì vậy tôi đã nói với họ rằng chúng tôi sử dụng Bộ lọc cho điều đó. Tôi đã trả lời đúng chưa?Mô-đun HTTP và trình xử lý HTTP trong ASP.Net MVC?
Trả lời
Bộ lọc hành động cho phép bạn nối vào các sự kiện cụ thể của MVC trong khi mô-đun HTTP cho phép bạn nối vào các sự kiện ASP.Net, ngay cả trong MVC, để thực hiện Mô-đun HTTP và trình xử lý HTTP, bạn sẽ cần triển khai giao diện tương ứng. Ngoài ra, nếu bạn muốn chức năng của mình chỉ được thực hiện một lần cho mỗi Yêu cầu Http, bạn nên sử dụng một HttpModule. ActionFilters có thể được thực hiện nhiều lần trong một chuyến đi đến máy chủ. Để giải thích các mô-đun HTTP và Trình xử lý HTTP, mô-đun HTTP và trình xử lý HTTP được MVC sử dụng để chèn logic xử lý trước vào chuỗi yêu cầu.
Trình xử lý HTTP là bộ xử lý trước dựa trên tiện ích mở rộng trong khi Mô-đun HTTP là bộ tiền xử lý dựa trên sự kiện. Ví dụ: nếu bạn muốn thay đổi cách xử lý tệp jpg
, bạn sẽ triển khai trình xử lý HTTP tùy chỉnh so với nếu bạn muốn thực thi logic bổ sung trong khi xử lý yêu cầu, bạn sẽ triển khai mô-đun HTTP tùy chỉnh. Chỉ có một trình xử lý HTTP cho một yêu cầu cụ thể nhưng có thể có nhiều mô-đun HTTP.
Để triển khai trình xử lý HTTP, bạn thực hiện IHTTPHandler
lớp và triển khai các phương thức ProcessRequest
và thuộc tính IsResuable
. IsResuable
thuộc tính xác định liệu trình xử lý có thể được sử dụng lại hay không.
public class MyJpgHandler: IHttpHandler {
public bool IsReusable {
get {
return false;
}
}
public void ProcessRequest(HttpContext context) {
}
}
Tiếp theo chúng ta cần phải xác định những loại yêu cầu sẽ được xử lý bởi bộ xử lý tùy chỉnh của chúng tôi trong web.config
file:
<httpHandlers>
<add verb="*" path="*.jpg" type="MyJpgHandler"/>
</httpHandlers>
Để thực hiện một mô-đun HTTP, chúng ta cần phải thực hiện IHttpModule
và đăng ký các sự kiện cần thiết theo phương thức init
. Như một ví dụ đơn giản, nếu chúng ta muốn ghi lại tất cả các yêu cầu:
public class MyHttpModule: IHttpModule {
public MyHttpModule() {}
public void Init(HttpApplication application) {
application.BeginRequest += new EventHandler(this.context_BeginRequest);
application.EndRequest += new EventHandler(this.context_EndRequest);
}
public void context_BeginRequest(object sender, EventArgs e) {
StreamWriter sw = new StreamWriter(@ "C:\log.txt", true);
sw.WriteLine("request began at " + DateTime.Now.ToString());
sw.Close();
}
public void context_EndRequest(object sender, EventArgs e) {
StreamWriter sw = new StreamWriter(@ "C:\log.txt", true);
sw.WriteLine("Request Ended at " + DateTime.Now.ToString());
sw.Close();
}
public void Dispose() {}
}
Và đăng ký mô-đun của chúng tôi:
<httpModules>
<add name="MyHttpModule " type="MyHttpModule " />
</httpModules>
- 1. Trình xử lý HTTP và mô-đun HTTP
- 2. Trình xử lý HTTP và gói javascript trong VS 2012
- 3. Trình xử lý tin nhắn và Mô-đun Http?
- 4. ASP.NET MVC và HTTP 401,0 - Unauthorized
- 5. Angular2: HTTP xử lý
- 6. ASP.NET MVC lỗi 6 xử lý dựa trên mã trạng thái HTTP
- 7. Xử lý HTTP ContentEncoding "deflate"
- 8. ASP.NET MVC [RequireHttps] - trở về http
- 9. Xử lý thời gian chờ của phiên trong trình xử lý http chung
- 10. Gỡ lỗi Trình xử lý HTTP từ Visual Studio
- 11. Góc: xử lý lỗi $ http 404
- 12. Node.JS, Express và Heroku - cách xử lý HTTP và HTTPS?
- 13. Tắt Xử lý Lỗi HTTP IIS7?
- 14. Kiểm tra đơn vị http xử lý?
- 15. HttpURLConnection Android: Xử lý HTTP chuyển hướng
- 16. http Request.FormFile: xử lý các tệp zip?
- 17. Xử lý ASP.NET MVC RequestValidationException trong Area
- 18. Xử lý lỗi trong ASP.NET MVC
- 19. Angularjs - xử lý lỗi lời hứa $ http
- 20. Góc 2 HTTP xử lý lỗi 404
- 21. HTTP - 500 org.springframework.web.util.NestedServletException: Xử lý trình xử lý không thành công;
- 22. HTTP module vs bộ lọc hành động trong asp.net-mvc
- 23. Trình xử lý HTTP và triển khai Resteasy với cam kết và an ủi
- 24. Cách xử lý Xác thực cơ bản HTTP trong AVURLAsset?
- 25. Xử lý các POST HTTP đồng thời lớn trong ứng dụng ASP.NET
- 26. Xử lý nhiều yêu cầu HTTP song song trong Node.js
- 27. Xử lý ASP.NET MVC 404 và IIS7 <httpErrors>
- 28. Làm cách nào để xử lý các phản hồi http đa phần trong Ruby Net: HTTP?
- 29. tự động xử lý phản ứng gzip http trong Android
- 30. Xử lý ngoại lệ ASP.NET MVC
Các bộ lọc được chỉ gọi cho các yêu cầu xử lý bởi bộ điều khiển. Nói chung, bạn sẽ phải sử dụng IHttpHandler và IHttpModule ... trừ khi bạn đang ở trong OWIN, trong trường hợp đó nó sẽ là một lớp OWIN Middleware. – Dai
Tôi không đưa bạn đến đây. Tôi không chắc về OWIN –