2010-03-11 29 views
28

Giả sử cả hai FirstModuleSecondModule xử lý sự kiện Application_BeginRequest. Nó sẽ thực hiện theo thứ tự được định nghĩa trong web.config?Thứ tự thực hiện cho HttpModules được xác định như thế nào?

<httpModules> 
    <add type="MyApp.FirstModule, MyApp" name="FirstModule"/> 
    <add type="MyApp.SecondModule, MyApp" name="SecondModule"/> 
    <add type="OtherApp.OtherModule, OtherApp" name="OtherModule"/> 
</httpModules> 

Có cách nào khác để chỉ định thứ tự không?

Trả lời

31

Theo this forum post, HttpModules được thực hiện theo thứ tự mà chúng đã được đăng ký. Điều này có ý nghĩa với tôi, bởi vì nếu không các chỉ thị <clear><remove> cũng sẽ không hoạt động như mong đợi, ví dụ: khi được sử dụng như thế này:

<httpModules> 
    <clear/> 
    <add... /> 
</httpModules> 
+0

Ai đó trong bài đăng trên diễn đàn KHÔNG nói điều đó. Tuy nhiên có một số người cũng nói rằng bạn không nên phụ thuộc vào nó. – jessegavin

+8

Không nên phụ thuộc vào nó có, không phải vì nó không hoạt động nhưng vì cân nhắc thiết kế và thúc đẩy khớp nối lỏng giữa các mô-đun. Nhưng không có trường hợp thứ tự các mô-đun sẽ khác với những gì có trong tệp cấu hình. Hi vọng điêu nay co ich. –

+0

Có vẻ như bạn có thể đặt hàng, tuy nhiên thứ tự dường như bị khóa và bạn phải mở khóa các mục nhập để ảnh hưởng đến thứ tự thực tế. – jamiebarrow

-1

Tôi không nghĩ rằng bạn có thể đảm bảo hoặc chỉ định thứ tự mà httpmodules sẽ chạy. Nếu SecondModule phụ thuộc vào FirstModule thì tốt hơn là chỉ cần kết hợp chức năng của chúng thành 1 httpmodule.

+4

Tôi có một bên thứ ba HttpModule mà UrlRewriting, tôi thực sự muốn có thể chặn yêu cầu trước khi nó đến HttpModule của bên thứ ba. – jessegavin

+0

Bạn có thể đính kèm trình xử lý sự kiện của mình vào một sự kiện được kích hoạt trước các sự kiện mà mô-đun urlrewriting quan tâm. Vì vậy, nếu UrlRewriting chỉ xử lý EndRequest bạn có thể đính kèm vào BeginRequest. –

Các vấn đề liên quan