26

私は asp.net WebAPI を使用しており、URI を要求しているユーザーが実際にデータを取得できるかどうかを簡単に確認するカスタム ActionFilter を作成する必要があります。

これらのユーザーは、基本認証を介して Web サービスを使用することを既に承認されており、そのロールはカスタム ロール プロバイダーを介して検証されています。

最後に、URI のパラメーターを使用して要求しているデータを表示する権限があることを確認する必要があります。

これが私のコードです:

public class AccessActionFilter : FilterAttribute, IActionFilter
    {

        public System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken, Func<System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>> continuation)
        {

            var result = //code to see if they have permission returns either 0 or 1

            if (result==0) {
               throw new ArgumentException("You do not have access to this resource");
            }
            return continuation();
        }
    } 

現在、私が望んでいるものではないエラーをスローするだけです。むしろ戻りたいSystem.Net.HttpStatusCode.Unauthorizedのですが、オーバーライドしているメソッドに少し不満があり、完全には理解していません。

その値を返すにはどうすればよいですか?

4

2 に答える 2

35

おそらく例外に固執するのが最善ですが、HttpResponseExceptionを使用するとHttpステータスコードも返されます。

throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));

これについてここに良い質問があります。

ps

実装する方が簡単/クリーンかもしれませんActionFilterAttribute

public class AccessActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        var result = //code to see if they have permission returns either 0 or 1

        if (result==0) 
        {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
        }
        base.OnActionExecuting(actionContext);
    }

}

于 2012-12-14T18:38:20.853 に答える