实现IHttpHandler导致响应返回空HTML?

时间:2014-05-20 22:38:48

标签: html asp.net iis httphandler

我使用IIS 7和.NET 2.0实现了这个HttpHandler,以限制对我们服务器的某些请求的访问:

using System;
using System.Web;

public class HtmlHandler : IHttpHandler
{
    public bool IsReusable
    {
        get
        {
            return true;
        }
    }

    public void ProcessRequest (HttpContext context)
    {
        if(!context.Request.IsAuthenticated)
            context.Response.Redirect("/inc/logout.asp");
    }
}

我在IIS中设置它是这样的:

enter image description here

起初,它似乎有效。如果在尝试访问.html文件时未对请求进行身份验证,则会将我重定向到登录页面。

问题是,当我执行登录并尝试访问该页面时,它只返回一个空白页面。只有html,head和body标签。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

根据我的记忆,IHttpHandler是你用作最终结果的东西。

如果您正在寻找过滤器/代理,则应实施IHttpModule

窥视 - IHttpHandler vs IHttpModule

答案 1 :(得分:0)

你使用了错误的方法。 HttpHandlers通常用作Ajax处理程序来处理请求并将字符串或JSON数据返回给JavaScript客户端。

我认为通过定义从System.Web.UI.Page继承的自己的'BasePage'类可以更好地解决您的问题;你可以把这个..

if(!context.Request.IsAuthenticated)
            context.Response.Redirect("/inc/logout.asp");

..在PageLoad中,然后更改您的安全页面,以便它们从您的新BasePage类继承而不是System.Web.UI.Page

这样,对从BasePage派生的每个页面运行检查,并且实际执行重定向;用户将被重定向。就用户而言,在HttpHandler中执行重定向似乎无能为力。