Sau khi đọc về phần mềm trung gian lõi asp.net, tôi bối rối khi nào tôi nên sử dụng bộ lọc và khi nào tôi nên sử dụng phần mềm trung gian vì chúng dường như đạt được cùng một mục tiêu. Khi nào nên sử dụng phần mềm trung gian thay cho bộ nối?
Sau khi đọc về phần mềm trung gian lõi asp.net, tôi bối rối khi nào tôi nên sử dụng bộ lọc và khi nào tôi nên sử dụng phần mềm trung gian vì chúng dường như đạt được cùng một mục tiêu. Khi nào nên sử dụng phần mềm trung gian thay cho bộ nối?
Câu trả lời:
Có một video về điều này trên kênh 9: ASP.NET Monsters # 91: Middleware vs. Filters . Để tóm tắt video:
Việc thực thi yêu cầu bắt đầu và chúng ta có một phần mềm trung gian và một phần mềm trung gian khác, hãy nghĩ về nó giống như "búp bê Nga bên trong búp bê" và cuối cùng phần mềm trung gian định tuyến khởi động và sau đó yêu cầu đi vào đường ống MVC.
Vì vậy, nếu bạn không yêu cầu ngữ cảnh của MVC (giả sử bạn quan tâm đến luồng và thực thi, như phản hồi tiêu đề một số cơ chế định tuyến trước, v.v.) thì hãy sử dụng phần mềm trung gian .
Nhưng nếu bạn yêu cầu ngữ cảnh của MVC và bạn muốn hoạt động chống lại các hành động thì hãy sử dụng bộ lọc .
Phần mềm trung gian hoạt động ở cấp độ ASP.NET Core và có thể hoạt động theo mọi yêu cầu đơn lẻ đến ứng dụng.
Mặt khác, bộ lọc MVC chỉ chạy cho các yêu cầu đến MVC.
Vì vậy, ví dụ: nếu tôi muốn thực thi rằng tất cả các yêu cầu phải được thực hiện qua HTTPS, tôi sẽ phải sử dụng phần mềm trung gian cho điều đó. Nếu tôi đã tạo bộ lọc MVC làm được điều đó, người dùng vẫn có thể yêu cầu các tệp tĩnh, ví dụ qua HTTP.
Nhưng mặt khác, thứ mà thời lượng yêu cầu nhật ký trong bộ điều khiển MVC hoàn toàn có thể là một bộ lọc hành động.
Việc thực thi middleware
xảy ra trước khi ngữ cảnh MVC có sẵn trong đường ống. Có nghĩa là, middleware
không có quyền truy cập vào ActionExecutingContext
hoặc ActionExecutedContext
trong trường hợp của ActionFilter chẳng hạn. Những gì bạn có quyền truy cập là HttpContext
, sẽ cho phép bạn thực hiện các hành động theo yêu cầu cũng như phản hồi. Vì liên kết mô hình chưa xảy ra, việc sử dụng phần mềm trung gian sẽ không phù hợp để chạy chức năng xác nhận hoặc sửa đổi giá trị. Middleware
cũng sẽ chạy trên mọi yêu cầu bất kể bộ điều khiển hoặc hành động nào được gọi.
Mặt khác, filters
sẽ chỉ chạy trên các hành động và bộ điều khiển được chỉ định trừ khi bạn đăng ký bộ lọc trên toàn cầu khi khởi động. Vì bạn có toàn quyền truy cập vào ngữ cảnh, bạn cũng có thể truy cập bộ điều khiển và chính hành động.
Nguồn và ví dụ: dotnetcultist.com