0

ログイン ページを呼び出す前にいくつかのライセンス チェックを実行する asp.net Web アプリケーションがあります。製品にライセンスが付与されていない場合は、エラーの詳細とともに abc.aspx ページに移動します。このライセンス チェックは、web.config を介して構成された HttpModule です。

コンテキスト認証用のイベント ハンドラーがあります。abc.aspx ページが呼び出されるたびに、このイベントが複数回発生し、ページの読み込みは発生しません。

Init で、このコードを使用してイベント ハンドラーを追加します。

context.AuthenticateRequest += new EventHandler

HTML ページを使用すると、この問題は発生しないようです。xyz.aspx などの他の 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>

ライセンスモジュールのinit()メソッド

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

    }
4

1 に答える 1

0

問題は、abc.aspx も認証していることが原因だと思います。

ページに移動してライセンス チェックが失敗すると、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 に答える