用于处理两个不同HTTP响应的通用类

时间:2017-02-24 05:19:31

标签: c# rest generics

我正在向谷歌教室写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

1 个答案:

答案 0 :(得分:0)

为什么不在反序列化之前检查状态代码请求?您可以尝试相同:

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