I'm using HttpClient to connect to a server (see simplified code below). I cant figure out how I would respond to HTML error codes (e.g. 403) and timeouts so I can report what the result is.
When I encounter a 403 error code an error pop-up occurs in Visual Studio. But I can figure out how I convert this into try in the code. i.e. is the name of the exception present in the error pop-up?
using System.Net.Http;
HttpClient client = new HttpClient();
var response = client.PostAsync(dutMacUrl, null).Result;
var result = response.Content.ReadAsStringAsync().Result;
Talk1:
why not using async?
Talk2:
Dont know what you mean. Can you be more specific?
Solutions1
you can use async/await feature to simplify your code and avoid using Result.
for example
public async Task Foo(string uri)
{
var client = new HttpClient();
try
{
var response = await client.PostAsync(uri, null);
}
catch (Exception ex)
{
//here you handle exceptions
}
// use this if (response.StatusCode != HttpStatusCode.OK) { do what you want }
// or this if (response.IsSuccessStatusCode) { do what you want }
var result = await response.Content.ReadAsStringAsync();
return result;
}
Talk1:
Hi thanks - I see where you are getting the status code (which I guess is related to the HTML response code i was talking about) but is there a way to deal with timeout as well?
Solutions2
If you are using webAPI another option is to use IHttpActionResult
public object IHttpActionResult mymethod()
{
//instantiate your class or object
IEnummerable myobject = new IEnmmerable(); //assuming you want to return a collection
try{
//..dostuff
//..handle dto or map result back to object
return Ok(myobject)
}
catch(Exception e)
{
//return a bad request if the action fails
return BadRequest(e.Message)
}
}
This would allow you to make a call to your api endpoint and either return a successful response with the updated object or return a bad request if the endpoint fails.