2017-02-24 5 views
0

私はREST api Googleの教室に電話をしています。 たとえば、電話で - https://classroom.googleapis.com/v1/userProfiles/ {userId}です。 ユーザーがGoogleの教室を有効にしている場合は、jsonUserProfileタイプになります。2つの異なるHTTP応答を処理する汎用クラス

{ 
    "id": "XXXXX", 
    "name": { 
     "givenName": "student1", 
     "familyName": "User", 
     "fullName": "student1 User" 
     } 
} 

その他、 ユーザーがアクセスできない場合は、これが表示されます。

{ 
    "error": { 
    "code": 403, 
    "message": "@NotGoogleAppsUser The user is not a Google Apps user.", 
    "status": "PERMISSION_DENIED" 
    } 
} 

REST呼び出しを行うための方法は、多くの異なる型を返す他のすべての呼び出しのために再利用されますGeneric方法です。

public T SendRequest<T>(RequestWrapper wrapper) 
    { 


     RestSharp.Deserializers.JsonDeserializer deserial = new RestSharp.Deserializers.JsonDeserializer(); 
     var client = new RestClient(wrapper.Url); 

     RestRequest request = CreateRequest(
      wrapper.Data, 
      wrapper.Header, 
      wrapper.Method); 
     IRestResponse response = client.Execute(request); 


     return deserial.Deserialize<T>(response); 
    } 

問題は、私はT型としてUserProfileを送信するとき、私は直列化復元された応答の後、アクセスコードを取得しないです。

私のクラスを再設計してresponseT typeにする方法はありますか?

最初のアイデア

はエラー・クラスを作成し、 UserProfileはそれを継承 UserProfileexternal DLLに属しているとことはできません を作ることでした。

他の解決方法はありますか? TIA

答えて

0

デシリアライズする前にステータスコードの要求をチェックしないのはなぜですか?

RestResponse response = client.Execute(request); 
HttpStatusCode statusCode = response.StatusCode; 
int numericStatusCode = (int)statusCode; 
if(numericStatusCode == 403) return null; 
+0

これは禁止されているケースです。認証トークンが期限切れになっていて、再生成が必要な場合があります。 – SJMan

関連する問題