是否可以配置 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 进行日志记录的示例。