0

私が得たもの:

  • SecureBasePage.vb(ログインが必要なページに継承されます)
  • Default.aspx継承するSecureBasePage

どうあるべきか:クライアントは要求しますDefault.aspxが、ログインしていないためにログインにリダイレクトされます。

SecureBasePage.vbこのコンストラクターがあります

Public Sub ()
        If userIsAuthenticated Then

        Else
            Throw New LoginException()
        End If

End Sub

これにより、例外が発生しますLoginException。ここで、クライアントをにキックする何らかのグローバル例外ハンドラーによってキャッチされるようにしますlogin.aspx

Application_Error()に関数があることは知っていますGlobal.asaxが、私の意見では、これは例外ハンドラーではServer.GetLastError()ありません。例外を受け取るだけで、例外をキャッチしないからです。したがって、この関数は、開発者が未処理の例外に関する電子メールを送信できるようにするためのものである可能性が高くなります。これを「グローバル例外ハンドラー」ではなく「グローバル未処理例外ハンドラー」と呼びます。

コンストラクターの例外スローをキャッチするために、ちょっと試してみることができるものはありますか?

4

1 に答える 1

0

ログインが必要なすべてのページはクラスから継承さSecureBasePageれるため、ロジックをそこに実装するのがおそらく最も理にかなっています。OnLoadまたはのようなページメソッドの1つをオーバーライドOnPreLoadして、リダイレクトを処理するだけです。

エラーを処理するためにに依存することはお勧めしませんglobal.asaxので、基本クラスがおそらく最も適切な場所です。

編集

一般的な経験則として、ロジックのフローを制御するために例外を使用するべきではありません。例外自体に有用なログ情報が含まれていない限り、特にほぼすべてのリクエストで使用されるロジックの場合、それはおそらく有益というよりもコストがかかります。

この記事では、このトピックに関するいくつかの役立つアドバイスを提供します。

于 2012-05-01T14:09:10.520 に答える