异步 HTTP 响应消息

Asynchronous HTTP Response Message

所以这个问题已经存在一段时间了。我不确定为什么 Visual Studio 调试器会跳过我的 Http 响应消息步骤。这是我目前的代码:

public async void APIcall()          
{                
    HttpClient httpClient = new HttpClient();
    HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://xxxx");
    requestMessage.Headers.Add("Accept", "application/json");
    requestMessage.Headers.Add("ContentType", "application/json");
    requestMessage.Headers.Add("RequestMessageGUID", "xxxxxx");
    HttpResponseMessage response = await httpClient.SendAsync(requestMessage);
    string result = await response.Content.ReadAsStringAsync();
    Console.WriteLine(result);
    Console.ReadLine();
}

请提出您的建议并帮助解决此问题。

首先,您应该避免对 void 方法执行 async,除非它是事件处理程序。使用 Task 即使您没有返回任何东西。

接下来您假设您将始终从您的请求中获得内容。

你应该先看看有没有东西要拿

当你在 void 方法上使用异步时,你的异常不会被捕获。这可能就是为什么它一直像你说的那样跳过。应该是出错了。

private static HttpClient httpClient = new HttpClient();
public async Task APIcall() {
    try {
        HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://xxxx");
        requestMessage.Headers.Add("Accept", "application/json");
        requestMessage.Headers.Add("ContentType", "application/json");
        requestMessage.Headers.Add("RequestMessageGUID", "xxxxxx");
        HttpResponseMessage response = await httpClient.SendAsync(requestMessage);
        if (response.Content.Headers.ContentLength.GetValueOrDefault() > 0) {
            string result = await response.Content.ReadAsStringAsync();
            Console.WriteLine(result);
        } else {
            Console.WriteLine(response.StatusCode);
        }
    } catch(Exception ex) {
        Console.WriteLine(ex.Message);
    }
    Console.ReadLine();
}