简体   繁体   中英

HttpClient.SendAsync() returns status code 200 even if the remote server is down

A simple login method that works just fine until I shut down my API. Then the try-catch block acts as intended, and an exception is thrown and caught but, _response comes out with a status code of "200, OK". For the love of me, I can't figure out why. Please help!

The code looks so bad mainly because of all the patching and testing I am doing on it to figure out what is happening.

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

using "HttpResponseMessage _response = new HttpResponseMessage();" was setting the _response.StatusCode to be as "200" and the code was not dealing with that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM