Событие BeginRequest слишком рано, чтобы зацепить страницу.На этом этапе цикла запросов IIS / ASP.NET даже не решил сопоставить ваш запрос с чем-либо.Поэтому вам, вероятно, следует попробовать что-то вроде события PostMapRequestHandler .
Однако это еще не все: в этот момент страница (если она есть) еще не выполнена.Это происходит прямо между событиями PreRequestHandlerExecute и PostRequestHandlerExecute .Так что Pre ... слишком рано, а Post ... слишком поздно.Лучше всего перехватить событие страницы, например PreRenderComplete , и выполнить инъекцию.
public void Init(HttpApplication context)
{
context.PostMapRequestHandler += OnPostMapRequestHandler;
}
void OnPostMapRequestHandler(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
page.PreRenderComplete += OnPreRenderComplete;
}
}
void OnPreRenderComplete(object sender, EventArgs e)
{
Page page = (Page) sender;
// script injection here
}
ВНИМАНИЕ: Мало кто все еще использует их, но Server.Execute и Server.Transfer не выполняют никаких событий конвейера .Таким образом, такие дочерние запросы никогда не могут быть перехвачены с помощью IHttpModule .