Glen
Glen

Reputation: 331

http client exception handling in asp.net core

i am using .net 5 latest prview..Below is the code for http client in mvc

var response = await _httpClient.SendAsync(request);
         try
        { 
            response.EnsureSuccessStatusCode();
            data = await response.Content.ReadFromJsonAsync<Abc>();
            return data;
        }
        catch (HttpRequestException ex) when (ex.StatusCode = 404)  ----how to check 404 error?
        {
            throw;
        }
        catch (HttpRequestException ex) when (ex.StatusCode == 503)
        {
            throw;
        }

How to check 404 error or other details in catch.am getting below error.Thanks in advance...

enter image description here

Upvotes: 3

Views: 8474

Answers (2)

vernou
vernou

Reputation: 7590

HttpRequestException.StatusCode is type of HttpStatusCode. You can't compare directly with int.

You can cast the status code to int like :

try
{ 
    response.EnsureSuccessStatusCode();
    data = await response.Content.ReadFromJsonAsync<Abc>();
    return data;
}
catch (HttpRequestException ex) when (((int)ex.StatusCode) == 404)
{
    throw;
}
catch (HttpRequestException ex) when (((int)ex.StatusCode) == 503)
{
    throw;
}

Or compare with the enumeration's values :

try
{ 
    response.EnsureSuccessStatusCode();
    data = await response.Content.ReadFromJsonAsync<Abc>();
    return data;
}
catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound)
{
    throw;
}
catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.ServiceUnavailable)
{
    throw;
}

Upvotes: 6

Vivien Sonntag
Vivien Sonntag

Reputation: 4629

The easiest way would be to use the proper enum for comparison:

var response = await _httpClient.SendAsync(request);
try
{ 
    response.EnsureSuccessStatusCode();
    data = await response.Content.ReadFromJsonAsync<Abc>();
    return data;
}
catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound)  ----how to check 404 error?
{
    throw;
}
catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.ServiceUnavailable)
{
    throw;
}

Another option would be casting to (int?), but using the enum should provide better readibility.

Upvotes: 7

Related Questions