如何从HttpClient()处理HTML错误代码和超时

时间:2015-02-24 21:01:23

标签: c# .net async-await dotnet-httpclient

我使用HttpClient连接服务器(请参阅下面的简化代码)。我无法弄清楚如何回复HTML错误代码(例如403)和超时,以便我可以报告结果。

当我遇到403错误代码时,Visual Studio中会出现错误弹出窗口。但我可以弄清楚如何在代码中将其转换为try。 ie是错误弹出窗口中出现的异常的名称?

using System.Net.Http;

HttpClient client = new HttpClient();
var response = client.PostAsync(dutMacUrl, null).Result;
var result = response.Content.ReadAsStringAsync().Result;

2 个答案:

答案 0 :(得分:1)

您可以使用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;
}

答案 1 :(得分:1)

如果您使用的是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端点,并使用更新的对象返回成功的响应,或者如果端点失败则返回错误的请求。