توفر ملفات Global.asax، والتي تسمى أحيانًا ملفات تطبيق ASP.NET، موقعًا مركزيًا للاستجابة للأحداث على مستوى التطبيق أو على مستوى الوحدة النمطية. يمكنك استخدام هذا الملف لتنفيذ أمان التطبيق والمهام الأخرى.
تم تكوين ملف Global.asax بحيث يتم رفض أي طلب HTTP مباشر (عبر عنوان URL) تلقائيًا، بحيث لا يتمكن المستخدمون من تنزيل محتوياته أو عرضها. يتعرف إطار عمل صفحة ASP.NET تلقائيًا على أي تغييرات تم إجراؤها على ملف Global.asax. يقوم إطار عمل صفحة ASP.NET بإعادة تشغيل التطبيق بعد تغيير Global.asax، والذي يتضمن إغلاق كافة جلسات المتصفح وإزالة كافة معلومات الحالة وإعادة تشغيل مجال التطبيق.
يرث الملف Global.asax من فئة HttpApplication، التي تحافظ على مجموعة من كائنات HttpApplication وتخصص الكائنات الموجودة في المجموعة للتطبيقات عند الحاجة. يحتوي الملف Global.asax على الأحداث التالية:
· Application_Init: يتم تشغيل هذا الحدث عند إنشاء مثيل للتطبيق أو استدعائه للمرة الأولى. سيتم استدعاؤه لجميع مثيلات كائن HttpApplication.
· Application_Dispose: يتم تشغيله قبل تدمير التطبيق. هذا هو المكان المثالي لمسح الموارد المستخدمة سابقًا.
· خطأ_التطبيق: يتم تشغيل هذا الحدث عند مواجهة استثناء غير معالج في التطبيق.
· Application_Start: يتم تشغيل هذا الحدث عند إنشاء المثيل الأول لفئة HttpApplication. يسمح لك بإنشاء كائنات يمكن الوصول إليها بواسطة كافة مثيلات HttpApplication.
· Application_End: يتم تشغيل هذا الحدث عند تدمير آخر مثيل لفئة HttpApplication. يتم تشغيله مرة واحدة فقط خلال عمر التطبيق.
· Application_BeginRequest: يتم تشغيله عند استلام طلب التقديم. بالنسبة للطلب، يكون هذا هو الحدث الأول الذي يتم تشغيله. عادةً ما يكون الطلب عبارة عن طلب صفحة (URL) يُدخله المستخدم.
· Application_EndRequest: الحدث الأخير الذي طلبه التطبيق.
· Application_PreRequestHandlerExecute: يتم تشغيل هذا الحدث قبل أن يبدأ إطار عمل صفحة ASP.NET في تنفيذ معالج حدث مثل صفحة أو خدمة ويب.
· Application_PostRequestHandlerExecute: يتم تشغيل هذا الحدث عندما ينتهي إطار عمل صفحة ASP.NET من تنفيذ معالج الحدث.
· Applcation_PreSendRequestHeaders: يتم تشغيل هذا الحدث عندما يرسل إطار صفحة ASP.NET رؤوس HTTP إلى العميل الطالب (المتصفح).
· Application_PreSendContent: يتم تشغيل هذا الحدث عندما يرسل إطار عمل صفحة ASP.NET المحتوى إلى العميل الطالب (المتصفح).
· Application_AcquireRequestState: يتم تشغيل هذا الحدث عندما يحصل إطار صفحة ASP.NET على الحالة الحالية (حالة الجلسة) المتعلقة بالطلب الحالي.
· Application_ReleaseRequestState: يتم تشغيل هذا الحدث عندما يكتمل إطار عمل صفحة ASP.NET من تنفيذ كافة معالجات الأحداث. سيؤدي هذا إلى قيام جميع وحدات الحالة بحفظ بيانات الحالة الحالية الخاصة بها.
· Application_ResolveRequestCache: يتم تشغيل هذا الحدث عندما يكمل إطار عمل صفحة ASP.NET طلب الترخيص. فهو يسمح لوحدة ذاكرة التخزين المؤقت بخدمة الطلبات من ذاكرة التخزين المؤقت، وبالتالي تجاوز تنفيذ معالجات الأحداث.
· Application_UpdateRequestCache: يتم تشغيل هذا الحدث عندما يكمل إطار عمل صفحة ASP.NET تنفيذ معالج الحدث، مما يسمح لوحدة ذاكرة التخزين المؤقت بتخزين بيانات الاستجابة لاستخدامها في الاستجابة للطلبات اللاحقة.
· Application_AuthenticateRequest: يتم تشغيل هذا الحدث عندما تقوم وحدة الأمان بإنشاء هوية صالحة للمستخدم الحالي. في هذا الوقت، سيتم التحقق من بيانات اعتماد المستخدم.
· Application_AuthorizeRequest: يتم تشغيل هذا الحدث عندما تؤكد وحدة الأمان أنه يمكن للمستخدم الوصول إلى المورد.
· Session_Start: يتم تشغيل هذا الحدث عندما يصل مستخدم جديد إلى موقع ويب التطبيق.
· Session_End: يتم تشغيل هذا الحدث عندما تنتهي مهلة جلسة المستخدم أو تنتهي أو عندما يغادر موقع ويب التطبيق.
إحدى المشكلات الرئيسية في استخدام هذه الأحداث هي معرفة الترتيب الذي يتم إطلاقها به. يتم إطلاق الأحداث Application_Init وApplication_Start مرة واحدة عند بدء تشغيل التطبيق لأول مرة. وبالمثل، يتم إطلاق الأحداث Application_Dispose وApplication_End مرة واحدة عند إنهاء التطبيق. بالإضافة إلى ذلك، يتم استخدام الأحداث المستندة إلى الجلسة (Session_Start وSession_End) فقط عندما يدخل المستخدمون إلى الموقع ويخرجون منه. تتعامل الأحداث المتبقية مع طلبات التطبيق بالترتيب التالي:
· Application_BeginRequest
· Application_AuthenticateRequest
· Application_AuthorizeRequest
· Application_ResolveRequestCache
·
Application_AcquireRequestState ·
Application_PreRequestHandlerExecute · Application_PreSendRequestHeaders
· Application_PreSendRequestContent
· <<رمز التنفيذ>>
·
Application_PostRequestHandlerExecute
·Application_Re
. LeaseRequestState · Application_UpdateRequestCache· Application_EndRequest
هذه الأحداث كثيرا ما تستخدم لأغراض أمنية. يوضح مثال C# التالي أحداث Global.asax المختلفة، باستخدام حدث Application_Authenticate لإكمال المصادقة المستندة إلى النموذج من خلال ملفات تعريف الارتباط. بالإضافة إلى ذلك، يقوم الحدث Application_Start بتعبئة متغير تطبيق، ويقوم Session_Start بتعبئة متغير جلسة العمل. يعرض الحدث Application_Error رسالة بسيطة تصف الخطأ الذي حدث.
Application_Start (مرسل الكائن، EventArgs e) {
التطبيق ["العنوان"] = "نموذج Builder.com";
}
جلسة عمل باطلة محمية (مرسل الكائن، EventArgs e) {
جلسة ["startValue"] = 0؛
}
محمي باطل Application_AuthenticateRequest(Object sender, EventArgs e) {
// استخراج ملف تعريف الارتباط لمصادقة النماذج
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = context.Request.Cookies[cookieName];
إذا (خالية == authCookie) {
// لا يوجد ملف تعريف ارتباط للمصادقة.
يعود؛
}
FormsAuthenticationTicket authTicket = null;
يحاول {
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
} قبض (استثناء على سبيل المثال) {
// تفاصيل استثناء السجل (تم حذفها للتبسيط)
يعود؛
}
إذا (خالية == authTicket) {
// فشل ملف تعريف الارتباط في فك التشفير.
يعود؛
}
// عند إنشاء التذكرة، تم تعيين خاصية بيانات المستخدم
// سلسلة محددة من أسماء الأدوار.
سلسلة [2] الأدوار
الأدوار[0] = "واحد"
الأدوار[1] = "اثنان"
// إنشاء كائن هوية
معرف FormsIdentity = new FormsIdentity( authTicket );
// سوف يتدفق هذا المبدأ خلال الطلب.
GenericPrincipal main = new GenericPrincipal(id, role);
// قم بإرفاق الكائن الرئيسي الجديد بكائن HttpContext الحالي
context.User = main;
}
خطأ محمي باطل Application_Error(Object sender, EventArgs e) {
Response.Write("حدث خطأ.");
}
http://www.cnblogs.com/niit007/archive/2006/08/13/475565.html