ASP.NET如何访问User.Identity.IsAuthenticated在Aplicatio

2019-09-18 14:14发布

我在ASP.Net使用窗体身份验证方法,问题是它只能保护“ 的.aspx”文件。 我想,以保护从未经授权的用户“kcfinder”文件夹“.PHP”文件。

我在“App_Code文件”文件夹Implemeted一个此类。

public class KCChecker
{
        public static void Process(HttpApplication Application)
    {
           HttpRequest Request = Application.Context.Request;
           HttpResponse Response = Application.Context.Response;
           string url = Request.Path.ToLower();
           if (url.IndexOf("/kcfinder/") == 0 && !HttpContext.Current.User.Identity.IsAuthenticated)
            {
            Response.Redirect("/");
            }
        }
}

问题是,它总是说“未将对象引用设置到对象的实例。” 上HttpContext.Current.User.Identity.IsAuthenticated 。 我试图将其更改为Application.Context.User.Identity.IsAuthenticated ,但它仍然显示了同样的错误。

有没有什么办法可以在这个自定义模块的处理功能访问用户对象?

Answer 1:

以下添加到您的web.config文件:

<modules runAllManagedModulesForAllRequests="true" />


Answer 2:

HttpApplication.PostAuthenticateRequest事件

对于PostAuthenticateRequest事件处理程序添加到您的HttpModule,并从那里调用你的过程(HttpApplication的)方法。

public class AuthModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PostAuthenticateRequest += new EventHandler(context_PostAuthenticateRequest);
    }

    public void Dispose() { }

    void context_PostAuthenticateRequest(object sender, EventArgs e)
    {
        var isAuthenticated = ((HttpApplication) sender).Context.User.Identity.IsAuthenticated;
    }
}


文章来源: ASP.NET how to access User.Identity.IsAuthenticated in Aplication Request module?