Реклама:

<%#■ webHandler Class-"ShowPipeline" Languago="c«" *>>

using System;

using System.Web;

using System.Reflection;

using System.ComponentModel;

public class ShowPipeline : IHttpHandler

i

static Pool _showAssgmblies = false;

// Имена событий конвейера // Имена событий

static st ring[] _handlerNames = { "BeginReqoest", "AuthenticateRequest". "DefaultAuttientication", "PostAuthent icateRequest", "AuthorizeRequest", "PostAutho rizeRequest", "ResolveRequestCache", "PostResolveRequestCache", "AcquireRequestState", "PostAcquireRequestState", "P reRequestHandle rExecute", "PostRequestHandlerExecute". "ReleaseRequestState", "UpdateRequestCache", "PostUpdateRequestCache", "EndRequest"

);

public void ProcessRequest(

{

if (ctx.Request.QueryString["asm"] == "true")

_showAssemblies = true; ctx.Response.Write("<hr />");

foreach (string s in _handlerNames) {

_showHandlers(s);

)

ctx.Response.Write("<hr />");

I

private void _showHandlers(string handlerName) {

HttpResponse r = HttpContext.Cur rent.Response; object key = _getPrivateAppField("Event" + handlerName): EventHandlerList ehl = (EventHandlerList)_getPrivateAppFie1d("_events");

MulticastDelegate md = <MulticastDelegate)ehl[key];

if (null != md)

{

r.Output.WriteLine("<h2>(0}</h2>", handlerName); foreach (Delegate d in md,GetlnvocationListO) <

Type tt = d.Target.GetType(); string asm = ""; if (_showAssemblies) i

asm = string.Format("<font color*'red'>[{0}]</font>", tt.Assembly.GetName());

)

r.Output.WriteLine( "{0}{1>.<font color='blue'>{2}</font><br>", asm, tt. d.Method.Name);

>

i

)

private object _getPrivateAppField(string fieldName) {

return _getPrivateField( typeof(HttpApplication), fieldName,

HttpContext,Cu rrent.Applicationlnstance):

}

private object _getPrivateField( Type t, string fieldName, object o)

return t.GetField( fieldName,

flindingFlags.Instance |

BinrjmgFlags.Stat ic |

BindingFlags.NonPuO) ic).GetValue(o):

>

private object _getPr ivateField(stnrig fieidNaroe. object o) !

return o.GetType().GetField( fieldName,

BindingFlags.Instance |

BindingFlags.Static I

BindingFlags. NonPub he). GetVaiue-(o):

}

public boo I isReusablu < get { return true: } }

}

Вы можете запустить этот обработчик и чистом приложении ASP.NET, чтобы отобразить все модули по умолчанию. После добавления файла global.asax и собственного модуля вы получите примерно такие результаты, как показано па рис. 2-5.

Байер Доминик Microsoft ASP.NET. Обеспечение безопасности. Мастер-класс

Рис. 2-5. Результаты работы конвейера

Компилирование страниц ASP.NET

Страницы ASP.NET состоят из разметки и кода (в отдельном файле или в блоке <.чЫр!>, вложенном н файл .анрх). Перед началом работы страницы обе ее части должны быть скомпилированы в класс, который реализует интерфейс. ШОрНашШвГ. Этот класс программно создает соответствующие элементы управления, добавляя код страницы и порождая класс из System.Web.UI.Page (который реализует интерфейс обработчика). Если для создания страницы вы используете приведенный далее код, то получите иерархию наследования.


⇐ Предыдущая страница| |Следующая страница ⇒