2009-06-28 75 views
5

Tôi đang cố gắng truy cập một Trang trong một HttpModule và tôi nghĩ rằng tôi nên làm điều này bằng cách gọi HttpContext.Current.Handler (Điều này nên tham khảo trang hiện tại) nhưng tôi nhận được null tất cả các thời gian.Tại sao HttpContext.Current.Handler là null?

Tôi đang phát triển bằng cách sử dụng .Net 3.5 framework.

Tôi đang kiểm tra điều này trên AuthorizeRequest và AuthenticateRequest

Cảm ơn.

Trả lời

8

Có thể yêu cầu chưa được trao cho người xử lý (ví dụ: bạn đang ở số BeginRequest).

+0

Tôi đang kiểm tra trên AuthorizeRequest và AuthenticateRequest – Paleta

+2

@Paleta: Bạn không thể kiểm tra nó ở đó. Trình xử lý sẽ được chọn sau khi yêu cầu được xác thực/ủy quyền. Bạn có thể kiểm tra nó trong sự kiện 'PostMapRequestHandler' và sau đó. –

0

Bạn đang truy cập thuộc tính nào trong phương pháp nào?

Trong IHttpModule.Init, nó sẽ là null. Bạn cần đăng ký trình xử lý sự kiện trên số application nhận được dưới dạng tham số cho phương thức Init và thực hiện công việc của bạn ở đó.

+0

Tôi đang kiểm tra trên AuthorizeRequest và AuthenticateRequest – Paleta

4

Trong AuthorizeRequestAuthenticateRequest, trình xử lý chưa được tạo. (Một trình xử lý không nên được tạo nếu yêu cầu bị từ chối) Vì vậy, thuộc tính này là null.

Tại sao bạn là Page và bạn đang cố gắng làm gì?

Bạn có thể cố gắng xử lý PostMapRequestHandler, xảy ra sau khi giải quyết các Page, và ném một HttpException hoặc gọi Response.End nếu bạn quyết định từ chối yêu cầu.

Tuy nhiên, xin lưu ý rằng để có được một thể hiện của trình xử lý, hàm tạo của nó phải chạy; đảm bảo nó không làm bất cứ điều gì quan trọng hoặc nhạy cảm.

1

Tôi có vấn đề tương tự và cuối cùng đã tìm ra giải pháp. vấn đề của tôi đã được trả lại null sau đó sử dụng mã này trên lớp bên ngoài. Tôi xin lỗi vì tiếng Anh của tôi không tốt.

giải pháp thông qua mã: (đã thử nghiệm)
bộ phân tích: VS 2010

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 

//[Description of MyNamespace] 
//|================================================================================> 
//|-----*(In The Name Of GOD)*----- 
//|================================================================================> 

namespace MyNamespace 
{ 
//Most Be "partial class" And ": System.Web.UI.Page" !!!! 
public partial class MyClass : System.Web.UI.Page 
{ 
    //|============================================================> 
    //| Value Of Class. 
    //|============================================================> 

    static System.Web.UI.Page Page1 = null; 
    static System.Web.UI.Page Page2 = null; 

    int form1Index = -0; 


    //Most Be Static Method!!!! 
    public static void GetMyPage() 
    { 
     //Both are a result code. 
     //هر دو کد یه نتیجه می دهد 
     Page1 = HttpContext.Current.Handler as System.Web.UI.Page; 
     Page2 = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler; 

    } 


    //|============================================================> 
    //| DO() Methods Of MyClass Class. 
    //|============================================================> 
    public void DO() 
    { 
     //Call Your Static Method => GetMyPage() 
     GetMyPage(); 

     if (Page1 != null) 
     { 
      for (int i = 0; i < Page1.Controls.Count; i++) 
      { 
       if (Page1.Controls[i].ID == "form1") 
       { 
        form1Index = i; 
        break; 
       } 
      } 
     } 

     if (form1Index != -0) 
     { 
      for (int j = 0; j < Page1.Controls[form1Index].Controls.Count; j++) 
      { 
       string ControlsID = Page1.Controls[form1Index].Controls[j].ID; 
       // Code location ... 
       //محل قرار گیری کد ها... 
      } 

     } 
    } 



    //|============================================================> 
    //| Destructor Methods MyClass Class. 
    //|============================================================> 
    ~MyClass() { } 
} 

}

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