2017-02-24 70 views
0

我正在寫谷歌教室的REST api調用。 例如在通話中 - https://classroom.googleapis.com/v1/userProfiles/ {userId}。 如果用戶啓用了Google教室,我會得到一個jsonUserProfile類型。通用類來處理兩個不同的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); 
    } 

問題是,當我送UserProfile爲T型,反序列化的響應後,我沒有得到訪問代碼。

有沒有什麼辦法可以重新設計我的班級,這樣我就可以得到的所有T type

最初的想法是創建一個錯誤類,使UserProfile繼承它, 作爲UserProfile屬於一個external DLL這是不可能的。

任何其他解決方案? TIA

回答

0

爲什麼在反序列化之前不檢查狀態碼請求?您可以嘗試相同的:

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

這是禁止的情況下,我有另一種情況下Auth令牌已過期,需要重新生成它。 – SJMan