如何与HttpResponseMessage.ReasonPhrase

时间:2019-02-15 21:11:15

标签: c# .net asynchronous asp.net-web-api

通过以下方法:

        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;
        }

如果响应不成功,我将返回null,否则我将返回定义的T。

在同步方法中,我将通过ref (ref string errMsg)传递一个字符串参数,该参数将带有http响应,但是我不确定如何通过异步调用来实现?我想做的是返回一个错误消息以及该对象(无论是否为空),如果失败则显示在我的winform消息上。我该怎么办?

1 个答案:

答案 0 :(得分:0)

  

如果响应成功,我将返回null

那真的没有道理。带有Get的方法告诉我应该返回一些东西。

  

我想做的是返回一条错误消息以及对象(无论是否为空),如果失败则显示在我的winform消息上。

您可以将响应包装在一个对象中,并使用the new pattern matching with the is operator使代码看起来更具可读性:

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)
{
}

一些最纯的类可能不喜欢使用空类,但是我认为空类的可读性,可维护性和可扩展性超出了空类的范围,但这实际上取决于您的上下文。

相关问题