0

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

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

在初始化时,我使用此代码添加事件处理程序

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>

license模块的init()方法

 public void Init(HttpApplication context)
    {
        context.AuthenticateRequest += new EventHandler(context_AuthenticateRequest);

    }
4

1 回答 1

0

我认为问题是由于您也在对 abc.aspx 进行身份验证。

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

当页面不是“abc.aspx”时,您可以做的是仅在您的 Init() 方法中附加身份验证请求事件。就像是:

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

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

于 2012-11-09T07:14:15.027 回答