سؤال

وأنا أحاول الوصول إلى الصفحة ضمن HttpModule وأعتقد أنني يجب أن نفعل ذلك من خلال الدعوة HttpContext.Current.Handler (هذا يجب الرجوع إلى الصفحة الحالية) ولكن أنا الحصول على باطل في كل وقت.

وأنا تطوير استخدام صافي 3.5 الإطار.

وأنا التحقق من ذلك على AuthorizeRequest وAuthenticateRequest

وشكرا.

هل كانت مفيدة؟

المحلول

وعلى الأرجح، لم يتم تسليم الطلب إلى معالج بعد (على سبيل المثال، كنت في BeginRequest).

نصائح أخرى

في AuthorizeRequest وAuthenticateRequest، لم يتم إنشاء معالج حتى الان. (لا ينبغي إنشاء معالج إذا تم رفض الطلب) لذلك، وهذه الخاصية هي فارغة.

وماذا تفعل لك Page، وماذا تحاول أن تفعل؟

هل يمكن أن تحاول التعامل مع PostMapRequestHandler، والذي يحدث بعد أن حل Page، ورمي في HttpException أو الدعوة Response.End إذا قررت رفض الطلب.

ومع ذلك، يرجى ملاحظة أن الحصول على مثيل معالج، يجب أن يعمل به منشئ. تأكد من أنها لا تفعل شيئا بالغ الأهمية أو الحساسية.

ولدي مشاكل مماثلة، والحل الذي تم التوصل أخيرا. وقد عاد مشكلتي باطل ثم استخدام هذا الرمز على الطبقة الخارجية. أعتذر عن لغتي الإنجليزية ليست جيدة.

وحل عن طريق كود: (هل اختبار)
اختبارها من قبل: 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() { }
}

و}

في طريقة ما أنت الحصول على هذا العقار؟

في IHttpModule.Init، سيتم null ذلك. تحتاج إلى تسجيل معالجات الأحداث على application تلقى كمعلمة إلى أسلوب Init والقيام عملك هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top