7

我有非常通用的 web 服务,它响应许多标准的 http 状态。但是,它会根据这些状态返回不同的类型。这是完全正确的 REST 实现:我 GET 一个状态为 200(OK)的 Person 实体,但是当发生错误时,例如身份验证问题,我收到带有错误消息列表的 403(禁止访问)(说明令牌已过期或我的帐户是不活动等)。

不幸的是,使用 RestSharp 我只能“绑定”到我应该期望的一种类型的数据:

  client.ExecuteAsync<Person>(request, (response) =>
  {
        callback(response.Data);
  });

当状态不是 200 时,我应该如何捕获错误消息?当然,我可以手动执行此操作并自己反序列化响应内容,但我认为应该有一些更清洁、更好的方法来实现这一点。我想使用这样的东西:

  client.ExecuteAsync<Person, ErrorList>(request, (response) =>
  {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            Callback(response.Data);
        }
        else if (response.StatusCode == HttpStatusCode.OK)
        {
            ErrorCallback(response.Errors);
        }
  });
4

1 回答 1

5

我一直处理它的方式是为restsharp响应编写一个后处理器。像这样的东西,

public class Response<T>
{
  public T Data {get;set;}
  public List<Error> Errors {get;set;}
}

public static Response<T> GetResponse<T>(this IRestResponse restResponse)
{
        var response = new Response<T>();

        if (response.StatusCode == HttpStatusCode.OK)
        {
            response.Data = JsonConvert.DeserilizeObject<T>(restResponse.Data)
        }

        response.Errors =JsonConvert.DeserilizeObject<List<Error>>(restResponse.Error)

        return response;
}

你可以像这样使用它,

var response = client.Execute(request).GetResponse<T>();
于 2013-05-13T22:14:19.767 回答