2009-09-07 24 views
11

Tôi đang cố gắng triển khai mẫu phiên cho mỗi yêu cầu trong ứng dụng ASP.NET MVC 2 Preview 1 và tôi đã triển khai IHttpModule để giúp tôi thực hiện việc này:HttpModule với ASP.NET MVC không được gọi là

public class SessionModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.Response.Write("Init!"); 
     context.EndRequest += context_EndRequest; 
    } 
    // ... etc... 
} 

Và tôi đã đưa điều này vào web.config: "Init"

<system.web> 
    <httpModules> 
     <add name="SessionModule" type="MyNamespace.SessionModule" /> 
    </httpModules> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="SessionModule" /> 
     <add name="SessionModule" type="MyNamespace.SessionModule" /> 
    </modules> 

Tuy nhiên, không bao giờ được ghi vào trang (tôi đang sử dụng máy chủ web tích hợp VS, Cassini). Ngoài ra, tôi đã cố gắng đặt breakpoint trong SessionModule nhưng họ không bao giờ phá vỡ. Tôi đang thiếu gì?

Trả lời

14

Bật ra có tệp Web.config trong thư mục Chế độ xem và một trong thư mục gốc. Đoán xem tôi đã đăng ký httpModules ở đâu? Đúng, thư mục Views. Tôi đã chuyển nó sang root.config gốc và bây giờ nó hoạt động như một nét duyên dáng.

+2

+1 bởi vì thats chính xác những gì tôi đã làm và đây là những gì nó đã để nhắc tôi kiểm tra lại:/ –

+3

Chưa thực hiện nó được nêu ra, nhưng đã bị ràng buộc. +1 – Dave

1

Bạn có thể phải đặt Response.Write trong phương thức đăng ký sự kiện EndRequest (hoặc BeginRequest). Tôi đoán đối tượng Response chưa được khởi tạo đầy đủ ở giai đoạn Init.

+0

Điều này không hoạt động -> người gửi var app = (HttpApplication); app.Context.Response.Write ("EndRequest!"); –

1

Vấn đề của tôi là tôi đã có [Xử lý lỗi] trên Phương pháp điều khiển, đã bắt lỗi trước khi trình xử lý lỗi tùy chỉnh của tôi có cơ hội.

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