Вы путаете HttpHandler
с HttpModule
.
HttpHandler
делает именно это: обрабатывает запрос. Поскольку вы только обрабатываете несанкционированное состояние, вы получаете контент только после авторизации.
HttpModule
рассмотрит запрос и либо сделает, либо не сделает с ним что-то, возможно, передав его обработчику, возможно, короткому замыканию запроса, если ему не нравится то, что он видит.
Точка не указана HttpModules
Выполняется только по запросу, но только один HttpHandler
за запрос.
Когда проверка подлинности, я получаю пустую страницу, так как, если запрос просто перестал
Потому что по отношению к обработчику, он имеет.
Конвейер HttpApplication
продолжает запускать дополнительные события после возвращения обработчика, но никакого дополнительного контента не генерируется.
Обычно вы не выполняете проверки подлинности в своем обработчике. Вы сделаете это до этого времени, и в структуре уже есть встроенная функция для различных режимов аутентификации.
Но, чтобы помочь вам на вашем нынешнем пути, вы могли бы сделать что-то более, как показано ниже:
public class MyModule : IHttpModule {
public void Init(HttpApplication app) {
app.PostResolveRequestCache += (src, args) => {
if (!Sessions.CurrentUser.Authenticated) {
app.Context.RemapHandler(new MyHandler());
}
}
}
public void Dispose() { }
}
public class MyHandler : IHttpHandler
{
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext ctx)
{
ctx.Response.ContentType = "text/plain";
ctx.Response.Write("ACCESS DENIED");
context.Response.End();
}
}
<modules>
<remove name="FormsAuthentication" />
<add name="MyModule" type="MyNamespace.MyModule" />
</modules>
/// Remove your httpHandler web config section.
Таким образом, ваш обработчик переназначен только если запрос не прошел проверку подлинности. В противном случае обработка продолжается, как обычно.