2

ASP.NET MVC 3アプリケーションにカスタムアクションフィルター(AuthenticateAttribute)があり、ユーザーが確実にログインできるようになっています。

OnActionExecutingメソッドで例外を発生させたいのですが、それらをHandleErrorグローバルフィルターで処理したいと思います。それは可能ですか?もしそうなら、どうすればいいですか?

現在、OnActionExecutingで例外を発生させると、HandleErrorグローバルフィルターがバイパスされます。これは、アクションiself内で発生する例外のみをトラップするためと考えられます。

4

1 に答える 1

2

でスローされた例外はOnActionExecuting、グローバルによって処理されHandleErrorAttributeます。web.configで有効になっていることを確認する必要があります。

<customErrors mode="On" />

これはあなたがとイベントについて話したと言われていAuthenticateAttributeますOnActionExecuting。これらの2つの概念には互換性がありません。カスタム認証属性を作成している場合は、認証の方法と不正なケースを処理する方法を派生さAuthorizeAttributeせてオーバーライドする必要があります。AuthorizeCoreHandleUnauthorizedRequest

HandleErrorAttribute例外をスローする代わりに、グローバルを使用して次のことを実行したくない場合もあります。

filterContext.Result = new ViewResult
{
    ViewName = "~/Views/Shared/401.cshtml"
};

アクション属性内に結果を設定すると、コントローラーアクションの実行が短絡し、ビューが直接レンダリングされます。

于 2011-09-12T14:38:46.480 に答える