Как вернуть объект вместе с HttpResponseMessage.ReasonPhrase - PullRequest
0 голосов
/ 16 февраля 2019

В следующем методе:

        public async Task<T> GetAsync(TResourceIdentifier identifier)
        {
            var responseMessage = await _httpClient.GetAsync(_addressSuffix + identifier);

            if(responseMessage.IsSuccessStatusCode)
                return await responseMessage.Content.ReadAsAsync<T>();

            return null;
        }

Я возвращаю ноль, если ответ не был успешным, иначе я верну букву T, как бы она ни была определена.

В методах синхронизации я передал бы строковый параметр ref (ref string errMsg), который содержал бы ответ http, но я не уверен, как это сделать с асинхронными вызовами?Я хотел бы вернуть сообщение об ошибке вместе с объектом (нулевым или нет) для отображения в моем сообщении winform, если оно не удалось.Как я могу это сделать?

1 Ответ

0 голосов
/ 16 февраля 2019

Я возвращаю ноль, если ответ успешен

Это не имеет смысла.Метод с Get говорит мне, что что-то должно быть возвращено.

Я хотел бы вернуть сообщение об ошибке вместе с объектом (нулевым или нет) для отображения в моем сообщении winformесли это не удалось.

Вы можете заключить свой ответ в объект и использовать шаблон новый , соответствующий оператору is , чтобы создать кодвыглядит действительно читабельно:

public interface ICallResult { }

public class CallSuccessful : ICallResult { }

public class CallFail : ICallResult 
{
   public string Details { get; set; }
}

public async Task<ICallResult> GetAsync(TResourceIdentifier identifier)

использование:

if ((await o.GetAsync(identifier)) is CallFail callFail)
{
  Console.WriteLine(callFail.Details);
}

// or
if ((await o.GetAsync(identifier)) is CallSuccessful)
{
}

Некоторым чистым может не нравиться использование пустого класса, но я бы сказал, что читаемость, удобство обслуживания и расширяемость весят пустые классы,но это действительно зависит от вашего контекста.

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