HttpModule无限重定向

时间:2014-05-29 17:39:14

标签: asp.net redirect forms-authentication httpmodule

我正在使用HttpModule尝试将用户重定向到登录页面,如果他们没有经过身份验证,但由于某种原因,它只是无限地重定向页面而不会登陆任何地方。

这是模块:

using System;
using System.Web;
using System.Web.Security;

public class AuthenticationModule : IHttpModule
{
    public AuthenticationModule()
    {            
    }

    public string ModuleName 
    { 
        get
        {
            return "AuthenticationModule";
        }
    }

    public void Init(HttpApplication app)
    {
        app.BeginRequest += (new EventHandler(Application_BeginRequest));
    }

    private void Application_BeginRequest(object source, EventArgs e)
    {
        HttpApplication app = (HttpApplication)source;
        HttpContext context = app.Context;
        HttpRequest request = context.Request;
        HttpResponse response = context.Response;

        if (!request.IsAuthenticated && !request.RawUrl.Contains(FormsAuthentication.LoginUrl))
        {
            FormsAuthentication.RedirectToLoginPage();
        }
    }

    public void Dispose() { }
}

我不记得曾经使用过HttpModules,所以我不确定什么不起作用。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

request.RawUrl是我在浏览器中输入的URL。您的支票request.RawUrl.Contains(FormsAuthentication.LoginUrl)区分大小写。

此外,没有对资源的检查。因此,每个图像,css文件等请求都将重定向到登录页面。您需要检查被调用的资源是否需要身份验证。

编辑(提前点击保存按钮)

此外,我会在AuthenticateRequest

上执行此操作