Можно ли настроить, когда Refit должен предпринять попытку десериализации? - PullRequest
0 голосов
/ 30 марта 2019

Можно ли сказать, что Refit не пытается сериализовать тело сообщения для определенных кодов HttpStatus?

Я интегрирую с API, который (в случае сбоя аутентификации) возвращает тело HTML вместо JSON вместе сКод состояния 203 вместо кода состояния 401/403.Это означает, что Refit будет пытаться сериализовать тело и выдать SerializationException вместо ApiException.

Возможно ли обработать этот экземпляр?Т.е. скажите Refit, чтобы он рассматривал только 200 как успешные или вставил шаг перед десериализацией, имеющий доступ к коду состояния?

1 Ответ

1 голос
/ 30 марта 2019

Вы можете использовать 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);

Здесь является примером того, как это делается с помощью Refit для регистрации.

...