2008-09-21 10 views
2

失敗したIAuthorizationFilterから結果アクションを設定しようとしています。しかし、私はフィルタ内からActionResultを作成する方法が不明です。私の通常のView( "SomeView")が機能していないので、コントローラーはフィルターの内側からアクセシブルではないようです。インスタンス化されていないように、コントロールを取得する方法や、アクション結果を作成する別の方法がありますか?IAuthorizationFilterの設定結果

は動作しません:

[AttributeUsage(AttributeTargets.Method)] 
    public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter 
    { 
    public void OnAuthorization(AuthorizationContext context) 
    { 
     if (!context.HttpContext.User.Identity.IsAuthenticated) 
     { 
      context.Result = View("User/Login"); 
     } 
    } 
} 

答えて

1

あなたがコンテキストにそれを設定し、その後、直接該当するのActionResultをインスタンス化することができます。例:

public void OnAuthorization(AuthorizationContext context) 
{ 
    if (!context.HttpContext.User.Identity.IsAuthenticated) 
    { 
     context.Result = new ViewResult { ViewName = "Whatever" }; 
    } 
} 
2

MVCフレームワークのAuthorizeAttributeに付属するIAuthorizationFilterの実装を見てください。フォーム認証を使用している場合は、結果をユーザー/ログインに設定する必要はありません。 401 HTTPステータスレスポンスを上げることができ、ASP.NETはログインページにリダイレクトされます。

結果をuser/loginに設定する際の1つの問題は、ユーザーのアドレスバーが更新されず、ログインページに表示されますが、URLが一致しないことです。一部の人にとって、これは問題ではありません。しかし、サイトのURLをユーザーがブラウザに表示する内容に対応させることを望む人もいます。

関連する問題