2017-02-24 2 views
0

Ich schreibe REST api Aufrufe an Google Klassenzimmer. Zum Beispiel im Anruf - https://classroom.googleapis.com/v1/userProfiles/ {userId}. Wenn der Benutzer Google Klassenzimmer aktiviert hat, erhalte ich einen json von UserProfile Typ.Generische Klasse, um zwei verschiedene HTTP-Antwort zu behandeln

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

Else, Wenn der Benutzer, ich dies keinen Zugriff hat bekommen.

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

Verfahren REST Anrufe zu machen, ist ein Generic Methode, die für alle anderen Anrufe wiederverwendet werden viele verschiedene Arten zurück.

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); 
    } 

Das Problem ist, wenn ich UserProfile als T-Typ senden, ich den Zugangscode nicht erhalten, nachdem die Antwort deserialisiert wird.

Gibt es eine Möglichkeit, wie ich meine Klassen neu gestalten kann, so dass ich alle response in einer T type bekommen.

Die ursprüngliche Idee war es, eine Fehlerklasse zu erstellen und UserProfile es erben machen, was nicht möglich ist, wie UserProfile zu einem external DLL gehört.

Irgendwelche anderen Lösungen? TIA

Antwort

0

Warum überprüfen Sie nicht vor der Deserialisierung die Statuscodeanforderung? Sie können versuchen, gleiche, dass:

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

Dies ist ein Fall für verboten ist, ich habe einen anderen Fall, in dem der Auth-Token abgelaufen ist und es regenerieren müssen. – SJMan

Verwandte Themen