是否可以配置 Refit 何时应尝试反序列化?
Is it possible to configure when Refit should attempt deserialization?
是否可以告诉 Refit 不要尝试序列化某些 HttpStatus 代码的消息正文?
我正在与一个 API 集成(当身份验证失败时)returns 一个 HTML 主体而不是 JSON 以及一个 203 状态代码而不是 401 /403 状态码。这意味着 Refit 将尝试序列化正文并抛出 SerializationException
而不是 ApiException
.
是否可以处理此实例? IE。告诉 Refit 仅将 200 视为成功或在反序列化之前注入一个可以访问状态代码的步骤?
您可以使用 DelegatingHandler
.
public class JamiesHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);
// Do stuff with the response here...
return response;
}
}
// Then
var httpClient = new HttpClient(new JamiesHandler()){ BaseAddress = ""};
var contract = Refit.RestService.For<SomeContract>(httpClient);
Here 是使用 Refit 进行日志记录的示例。
是否可以告诉 Refit 不要尝试序列化某些 HttpStatus 代码的消息正文?
我正在与一个 API 集成(当身份验证失败时)returns 一个 HTML 主体而不是 JSON 以及一个 203 状态代码而不是 401 /403 状态码。这意味着 Refit 将尝试序列化正文并抛出 SerializationException
而不是 ApiException
.
是否可以处理此实例? IE。告诉 Refit 仅将 200 视为成功或在反序列化之前注入一个可以访问状态代码的步骤?
您可以使用 DelegatingHandler
.
public class JamiesHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);
// Do stuff with the response here...
return response;
}
}
// Then
var httpClient = new HttpClient(new JamiesHandler()){ BaseAddress = ""};
var contract = Refit.RestService.For<SomeContract>(httpClient);
Here 是使用 Refit 进行日志记录的示例。