Asp.net:aspx页面的HttpApplication上下文身份验证被称为无限次,页面永远不会加载

时间:2012-11-09 06:36:10

标签: asp.net httpcontext

我有一个asp.net Web应用程序,在调用登录页面之前执行一些许可证检查...如果产品未获得许可,那么它会导航到带有一些错误详细信息的abc.aspx页面。此许可证检查是一个HttpModule,它通过web.config配置。

我有一个用于上下文身份验证的事件处理程序。每当调用abc.aspx页面时,都会多次触发此事件,并且页面加载永远不会发生。

在Init上,我使用此代码添加事件处理程序

context.AuthenticateRequest += new EventHandler

当我使用html页面时,似乎没有出现此问题。即使我使用其他一些aspx页面,例如xyz.aspx ...

,问题仍然存在

如何停止此身份验证n次。我试过HttpContext.Current.Response.End(),它停止了无限次调用,但是没有加载页面,页面显示为空白。

任何人都对这个问题有任何想法吗?

Global.asax的片段。

<%@ Application Language="C#" Inherits="Microsoft.Practices.CompositeWeb.WebClientApplication" %>

<script runat="server">

    private static bool _initializedAlready = false;
    private static readonly Object s_lock = new Object();

    //fires once on asp.net worker process start
    protected override void Application_Start(object sender, EventArgs e)
    {


    }

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (_initializedAlready)
        {
            return;
        }

        lock (s_lock)
        {

            if (_initializedAlready)
            {
                return;
            }

            //custom initialization code
            base.Application_Start(sender, e);

            _initializedAlready = true;
        }
    }



    public override void Init()
    {
        base.Init();

       //initialize the license module here....

         licenseModule.Init(this);

    }


</script>

<%@ Application Language="C#" Inherits="Microsoft.Practices.CompositeWeb.WebClientApplication" %> <script runat="server"> private static bool _initializedAlready = false; private static readonly Object s_lock = new Object(); //fires once on asp.net worker process start protected override void Application_Start(object sender, EventArgs e) { } protected void Application_BeginRequest(object sender, EventArgs e) { if (_initializedAlready) { return; } lock (s_lock) { if (_initializedAlready) { return; } //custom initialization code base.Application_Start(sender, e); _initializedAlready = true; } } public override void Init() { base.Init(); //initialize the license module here.... licenseModule.Init(this); } </script>

许可证模块的init()方法

1 个答案:

答案 0 :(得分:0)

我认为问题是由于您正在验证abc.aspx。

当您转到某个页面并且许可证检查失败时,它会重定向到abc.aspx。不幸的是,你没有从这个检查中豁免abc.aspx,它会自行检查,然后一次又一次地重定向到自己。

当页面不是“abc.aspx”时,您只能在Init()方法中附加身份验证请求事件。类似的东西:

if(!context.Context.Request.RawUrl.Contains("abc.aspx"))
     context.AuthenticateRequest += new EventHandler(context_AuthenticateRequest);

但是,如果您只想在登录页面上执行此操作,那么最好将身份验证检查放在后面的登录页面代码上。

相关问题