2009-07-20 28 views
6

Tôi gặp sự cố với HttpModule xác thực của mình. Vấn đề là nó rõ ràng là chạy cho mỗi yêu cầu duy nhất tôi nhận được trên máy chủ web của tôi (IIS7). Bởi vì nó cũng sử dụng biến Session, nó không hoạt động đúng trên các tệp CSS, JS và tương tự.Loại trừ HttpModule khỏi chạy cho nội dung tĩnh trên IIS7

Tôi cố gắng để sử dụng:

<add name="AuthModuleName" type="..." preCondition="managedHandler" /> 

nhưng vô ích. Nó vẫn chạy trên mọi yêu cầu bất kể phần mở rộng hoặc loại mime của nó. Tôi cũng nên thêm, có một cài đặt

<modules runAllManagedModulesForAllRequests="true"> 

dường như đáng ngờ đối với tôi và thực sự vô hiệu hóa điều kiện trước trên mô-đun. Nhưng thay đổi nó thành false, phá vỡ ứng dụng theo một cách hoàn toàn khác và với một ngoại lệ khác (SessionStateTempDataProvider yêu cầu SessionState được kích hoạt).

Ai đó có thể giúp tôi cách buộc IIS7 loại trừ HttpModule của tôi khi yêu cầu được tạo cho các tệp nội dung tĩnh không?

+0

BTW, bạn chắc chắn đây là IIS7 chứ không phải ASP.NET Development Server, phải không? Chỉ cần kiểm tra lại. –

+0

Tôi chắc chắn 100% ... –

Trả lời

3

runAllManagedModulesForAllRequests thuộc tính được thiết lập để sai để thực sự cấu hình bất kỳ mô-đun theo cách bạn muốn. Bạn cũng sẽ phải cấu hình lại một cách chính xác Session và những thứ khác nếu cần thiết, nhưng điều chính là trình xử lý thực thi đường ống xử lý các yêu cầu.

Câu trả lời được cung cấp trong one of my other questions:

Cám ơn Peter đã cung cấp câu trả lời mà làm việc một cách chính xác.

1

Tôi không biết về cài đặt IIS7 cho điều đó nhưng bạn có thể thực hiện việc này.

Đối tượng session sẽ có sẵn chỉ dành cho nội dung không tĩnh:

void yourEventHandler(object sender, EventArgs e) { 
    HttpApplication app = (HttpApplication)sender; 
    if (app.Context.Session == null) { 
     return; 
    } 
    // then your code here... 
} 

này sẽ đảm bảo mã của bạn sẽ không được chạy cho các tập tin như CSS, JS vv ​​Nhưng hãy ghi nhớ đối tượng session sẽ cũng chưa sẵn sàng trước sự kiện PostAcquireRequestState. (Đối với thứ tự của các HttpApplication sự kiện, xem this page.)

Edit: Ngoài ra, nó sẽ xuất hiện với ASP.NET Development Server (mặc dù tôi biết bạn nói IIS7 trong câu hỏi của bạn), bạn HttpModule sẽ vẫn chạy ngay cả đối với các tệp tĩnh.

+0

Có Tôi đang xử lý các công cụ phiên trong PostAcquireRequestState ... Nhưng tôi vẫn nghĩ rằng có thể loại trừ hoàn toàn mô-đun của mình ... Tôi phải làm cho nó hoạt động với "runAllManagedModulesForAllRequests = false" bằng cách nào đó . Bởi vì điều này đặt mô-đun của tôi để chạy trên MỌI yêu cầu. –

+0

Cách tiếp cận này không hoạt động với các trang không sử dụng phiên. – ygormutti

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