Как мне обработать результаты в моем универсальном RestService для неуниверсального запроса? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть интерфейс для общего использования REST Api.

public interface IRestService
{
     Task<TResult> PostAsync<TRequest, TResult, THandlerArgs>(string uri, TRequest data, EventHandler<HttpResponseMessage> resultHandler, string token = "");
}

На практике мне трудно понять, как обрабатывать определенные исключения и регулярный поток таким образом. Моя реализация выглядит так:

public async Task<TResult> PostAsync<TRequest, TResult, THandlerArgs>(string uri, TRequest data, EventHandler<HttpResponseMessage> resultHandler, string token = "")
{
    string serialized = await Task.Run(() => JsonConvert.SerializeObject(data))
                                          .ConfigureAwait(false);

    HttpResponseMessage response = await _httpClient.PostAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"))
                                                                   .ConfigureAwait(false);


    string responseData = await response.Content.ReadAsStringAsync()
                                            .ConfigureAwait(false);

    return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData));
}

Я могу вернуть свой десериализованный ответ для моего вызывающего класса. Но как я могу обработать, скажем, код несанкционированного статуса во время входа в систему? Я мог бы выбросить исключение и поймать его в вызывающей стороне, но что, если имя пользователя просто не является реальным логином? Это не исключение, а обычное явление во всех приложениях. Но я не вижу, как я могу определить это по ответным данным, которые я возвращаю.

Я рассмотрел вопрос об изменении типа возврата метода на HttpResponseMessage и проверке кода состояния из вызывающего класса. Что-то не так с этим?

Я также рассмотрел возможность передачи пользовательских обработчиков из вызывающего объекта (см. THandlerArgs выше), но мне это кажется немного излишним.

Что такое неуниверсальный способ обработки общих исключений или стандартных потоков, подобных этому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...