我正在向谷歌教室写REST api
次电话。
例如,在通话中 - https://classroom.googleapis.com/v1/userProfiles/ {userId
}。
如果用户启用了Google教室,我会获得json
UserProfile
类型。
{
"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类型时,在反序列化响应之后我没有获得访问代码。
我有什么方法可以重新设计我的课程,以便在response
中获得所有T type
。
最初的想法是创建一个错误类并让UserProfile
继承它,
由于UserProfile
属于external DLL
,因此无法执行此操作。
对此有何其他解决方案? TIA
答案 0 :(得分:0)
为什么不在反序列化之前检查状态代码请求?您可以尝试相同:
RestResponse response = client.Execute(request);
HttpStatusCode statusCode = response.StatusCode;
int numericStatusCode = (int)statusCode;
if(numericStatusCode == 403) return null;