3

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

Glen
  • 321
  • 4
  • 15

2 Answers2

7

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.

Wai Ha Lee
  • 8,598
  • 83
  • 57
  • 92
Christoph Sonntag
  • 4,459
  • 1
  • 24
  • 49
6

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;
}
vernou
  • 6,818
  • 5
  • 30
  • 58