如何处理来自 HttpClient() 的 HTML 错误代码和超时
How to deal with HTML error codes and timeout from HttpClient()
我正在使用 HttpClient
连接到服务器(请参阅下面的简化代码)。我无法弄清楚如何响应 HTML 错误代码(例如 403
)和超时,因此我可以报告结果。
当我遇到 403
错误代码时,在 Visual Studio 中出现错误弹出窗口。但是我可以弄清楚如何在代码中将其转换为 try
。即错误弹出窗口中是否存在异常的名称?
using System.Net.Http;
HttpClient client = new HttpClient();
var response = client.PostAsync(dutMacUrl, null).Result;
var result = response.Content.ReadAsStringAsync().Result;
您可以使用 async/await 功能来简化代码并避免使用 Result
。
例如
public async Task<string> 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;
}
如果您使用的是 webAPI,另一种选择是使用 IHttpActionResult
public object IHttpActionResult mymethod()
{
//instantiate your class or object
IEnummerable<yourClass> myobject = new IEnmmerable<yourClass>(); //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)
}
}
这将允许您调用 api 端点,并且 return 使用更新对象的成功响应或 return 如果端点失败则发出错误请求。
我正在使用 HttpClient
连接到服务器(请参阅下面的简化代码)。我无法弄清楚如何响应 HTML 错误代码(例如 403
)和超时,因此我可以报告结果。
当我遇到 403
错误代码时,在 Visual Studio 中出现错误弹出窗口。但是我可以弄清楚如何在代码中将其转换为 try
。即错误弹出窗口中是否存在异常的名称?
using System.Net.Http;
HttpClient client = new HttpClient();
var response = client.PostAsync(dutMacUrl, null).Result;
var result = response.Content.ReadAsStringAsync().Result;
您可以使用 async/await 功能来简化代码并避免使用 Result
。
例如
public async Task<string> 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;
}
如果您使用的是 webAPI,另一种选择是使用 IHttpActionResult
public object IHttpActionResult mymethod()
{
//instantiate your class or object
IEnummerable<yourClass> myobject = new IEnmmerable<yourClass>(); //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)
}
}
这将允许您调用 api 端点,并且 return 使用更新对象的成功响应或 return 如果端点失败则发出错误请求。