2011-01-17 1 views
2

私はカスタマイズされたAuthorizeAttributeを実装しようとしています。 AuthorizeCoreオーバーライドは、HttpContextBaseを受け入れます。ユーザーが正しい役割を持っていない場合は、エラーをスローします。 MasterName、ViewNameなどを設定して、ユーザーをリダイレクトするコードをいくつか見つけました。それはActionExecutingContextを使用しています。HttpContextBaseからActionExecutingContextを取得する方法

private void ThrowError(ActionExecutingContext filterContext, string message) 
    { 
    var ex = new Exception(message); 
    var errorInfo = new HandleErrorInfo(ex, filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, filterContext.ActionDescriptor.ActionName); 
    var viewData = new ViewDataDictionary(errorInfo); 

    filterContext.Result = new ViewResult { MasterName = MasterName, ViewName = ViewName, ViewData = viewData }; 
    } 

はAuthorizeCoreオーバーライドに渡さHttpContextBaseからActionExecutingContextを取得することが可能ですか?そうでない場合は、提案はありますか?

ありがとうございました。

答えて

2

AuthorizeCoreメソッドでは、リダイレクトを実行する必要はありません。ユーザーが認証され、許可されているかどうかによって、Http Contextを使用してtrueまたはfalseを返すだけです。エラーページにリダイレクトするには、AuthorizationContextが引数として渡され、ケースを処理できるHandleUnauthorizedRequestメソッドをオーバーライドする必要があります。このメソッドは、AuthorizeCorefalseを返したときに呼び出され、それに応じて動作します。

+0

私はそれをあまりにも複雑にしていました。アドバイスをいただきありがとうございます。 –

関連する問題