jac*_*cek 7 c# rest web-services http restsharp
我有非常通用的web服务,它响应许多标准的http状态.但是,它会根据这些状态返回不同的类型.这是完全正确的REST实现:我获取状态为200(OK)的Person实体,但是当发生错误时,例如auth问题,我收到带有错误消息列表的403(Forbidden)(说明令牌已过期或我的帐户是不活动等).
不幸的是,使用RestSharp我只能"绑定"到我应该期望的一种数据类型:
client.ExecuteAsync<Person>(request, (response) =>
{
callback(response.Data);
});
Run Code Online (Sandbox Code Playgroud)
当状态不是200时,我该如何捕获错误消息?当然,我可以手动执行此操作并自行反序列化响应内容,但我认为应该有一些更清晰,更好的方法来实现它.我想用这样的东西:
client.ExecuteAsync<Person, ErrorList>(request, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
Callback(response.Data);
}
else if (response.StatusCode == HttpStatusCode.OK)
{
ErrorCallback(response.Errors);
}
});
Run Code Online (Sandbox Code Playgroud)
我一直处理的方式是为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;
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用它
var response = client.Execute(request).GetResponse<T>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3107 次 |
| 最近记录: |