1

アクセスを保護したいコントローラーメソッドを公開する.NET 4.5 MVC 4 Web APIを構築しています。以下に示すように、適切にエンコードされた RSA トークンをチェックするアクション フィルター属性を作成しました。

    public class TokenValidationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        try
        {
            //authorize user
        }
        catch (Exception)
        {                
            actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden)
            {
                Content = new StringContent("Unauthorized User")
            };                
        }
    }
}

そして、私の .NET 3.5 CF アプリケーションでは、次のようにします。

public static List<string> GetAvailableProjectIds()
        {
        var idList = new List<string>();
        var url = "the url";
        var req = CreateRequest(url, true);

        try
        {
            using (var response = (HttpWebResponse)req.GetResponse())
            {
                //do something with the resonse
            }
        }
        catch (Exception ex)
        {

        }

        return idList;
    }

キャッチされる例外は WebException であり、正しい 403 Forbiden ステータス コードが含まれています。しかし、これ以上役立つものはありません。

「無許可のユーザー」で認証しようとしたことをエンド ユーザーに表示できるように、Content プロパティを取得する方法はありますか?

4

1 に答える 1

0

通信が正常なときに例外を使用するという動作は、私はあまり好きではありませんでした。この拡張メソッドを追加してみてください:

private static HttpResponse GetAnyResponse(this HttpRequest req)
{
   HttpResponse retVal = null;

   try
   {
      retVal = (HttpWebResponse)req.GetResponse()
   }
   catch (WebException webEx)
   {
      retVal = webEx.Response;
   }
   catch (Exception ex)
   {
      // these are the "bad" exceptions, let them pass
      throw;
   }

   return webEx;   
}

そして、コードを次のように変更します。

using (var response = (HttpWebResponse)req.GetAnyResponse())
{
    //do something with the resonse
}
于 2013-02-27T13:38:11.140 に答える