【问题标题】:HttpClient.SendAsync() returns status code 200 even if the remote server is downHttpClient.SendAsync() 返回状态代码 200,即使远程服务器已关闭
【发布时间】:2022-12-23 00:06:48
【问题描述】:

一个简单的登录方法,在我关闭我的 API 之前都可以正常工作。然后 try-catch 块按预期运行,抛出并捕获异常,但是 _response 出现状态代码“200,OK”。为了我的爱,我不知道为什么。请帮忙!

代码看起来很糟糕,主要是因为我正在对它进行所有修补和测试以弄清楚发生了什么。

HttpResponseMessage response = null;

public async Task<HttpResponseMessage> login(AuthModel model)
    {
        HttpResponseMessage response = null;
        model.responseMessage = "";

        var client = new HttpClient();
        string text = "{\"email\": \""+model.email+"\",\"password\": \""+model.password+"\"}";
        var request = new HttpRequestMessage
        {
            Method = HttpMethod.Post,
            RequestUri = new Uri(_baseURL+"/api/user/login"),
            Content = new StringContent(text, Encoding.UTF8, "application/json")
        };

        try
        {
            using (response = await client.SendAsync(request))
            {
                HttpResponseMessage _response = null;
                
                //response.EnsureSuccessStatusCode();
                if (response.IsSuccessStatusCode)
                {
                    //_response = response;
                    var body = await response.Content.ReadAsStringAsync();
                    var token = response.Headers.GetValues("auth-token").FirstOrDefault();
                    model.authToken = token;
                    model.name = body;
                    model.responseMessage = "Congratulations!";
                    return _response;

                }
                else
                {
                    model.name = "";
                    model.responseMessage = await response.Content.ReadAsStringAsync();
                    return _response;
                }
            }
        }
        catch(Exception e) {
        // model.responseMessage = e.Message;

            return _response;
        }

【问题讨论】:

  • 你在哪里设置_response
  • “_response 的状态代码为“200,OK””- 根据显示的代码,_response总是null“代码看起来很糟糕,主要是因为我正在做的所有修补和测试”- 听起来它也达到了你甚至不确定哪个版本的代码产生了什么结果的地步。现在是您简化和清理一些事情的好时机。请提供一个minimal reproducible example,它可以准确且仅演示您所描述的问题,并具体指出哪个操作显示了意外结果。
  • 我刚刚意识到将 _response 初始化为 new() HttpResponseMessage 将 StatusCode 设置为“200”……对不起那些人。

标签: c# dotnet-httpclient


【解决方案1】:

使用“HttpResponseMessage response = new HttpResponseMessage();”正在将 response.Status Code 设置为“200”并且代码没有处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2013-08-14
    • 2020-08-18
    相关资源
    最近更新 更多