Как установить собственный HttpHandler без использования HttpContext.RemapHandler

Вот сценарий:

У меня есть HttpHandler, который я хотел бы запустить для определенных URL-адресов, но эти URL-адреса не имеют согласованных расширений, поэтому я не могу сопоставить обработчик с помощью httpHandlers в Интернете. .config.

Вместо этого у меня есть собственный HttpModule, в котором я подписываюсь на PostAuthenticateRequest, проверяю некоторые условия и назначаю свой собственный обработчик с помощью HttpContext.RemapHandler (), если текущий URL соответствует требованиям.

Все отлично работает. , но ...

Чтобы повысить производительность, я хотел бы выполнять проверку URL-адреса и назначение обработчика только в том случае, если обработчик еще не назначен. Я не буду утомлять вас, почему мой обработчик применяется только тогда, когда никакой другой обработчик не назначен, но это всегда так.

Настоящая проблема здесь в том, что можно только проверить, назначен ли обработчик на PostMapRequestHandler, и тем самым время использовать RemapHandler () уже слишком поздно, потому что будет выброшено исключение InvalidOperationException (см. http://msdn.microsoft.com/en-us/library/system.web.httpcontext.remaphandler.aspx )

Я думал, что на этом этапе может сработать (но не работает) HttpContext.Handler = x; вместо HttpContext.RemapHandler (x);

Если задано таким образом, HttpContext.CurrentHandler обновляется, и все выглядит великолепно, но ProcessRequest () пользовательского обработчика никогда не вызывается.

Заранее благодарю вас за ваши мысли / комментарии. / insight.

5
задан JLB61000 4 August 2011 в 07:06
поделиться