ASP.NET HttpModule - гарантированное выполнение кода до и после обработки? - PullRequest
3 голосов
/ 14 ноября 2008

В основном я пытаюсь написать следующее (псевдокод) в ASP.NET HttpModule:

*pre-code*
try { handler.ProcessRequest(...) }
catch (Exception) { *error-code* }
finally { *post-code* }

Я обнаружил, что могу подключиться к HttpModule.PreExecuteHandler для «предварительного кода» и .Error для «кода ошибки». Но PostExecuteHandler не работает надежно.

BeginRequest и EndRequest работают надежно, но слишком рано для кода, который мне нужно написать, что требует проверки обработчика, который был выбран для выполнения. Обработчик не выбирается до окончания BeginRequest.

Есть ли лучшая практика для написания такой оболочки?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 ноября 2008

Нет способа сделать то, что вы хотите (по крайней мере, в модуле HttpModule), кроме как не вызывать Response.End. Эта статья объясняет это довольно хорошо и предлагает альтернативу Response.End в случае, если это побочный эффект вашего вызова Server.Transfer.

0 голосов
/ 15 ноября 2008

Добавьте это в ваш файл Global.asax:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
    //
}

protected void Application_PostRequestHandlerExecute(object sender, EventArgs e)
{
    //
}

Это должно работать на 100%.

...