我使用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中设置它是这样的:
起初,它似乎有效。如果在尝试访问.html文件时未对请求进行身份验证,则会将我重定向到登录页面。
问题是,当我执行登录并尝试访问该页面时,它只返回一个空白页面。只有html,head和body标签。
我做错了什么?
答案 0 :(得分:2)
答案 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中执行重定向似乎无能为力。