如何使用RestSharp捕捉异常

本文关键字:异常 RestSharp 何使用 | 更新日期: 2023-09-27 18:00:59

我正在与RestSharp合作一个项目。随着时间的推移,我发现了RestResponse类可以抛出的几个异常,其中大部分我必须处理,这样我的应用程序就不会崩溃。我怎么能知道所有可能的异常并单独处理它们呢。

如何使用RestSharp捕捉异常

#RestResponses and Errors#

这是来自RestSharp的wiki 上的文档

##关于错误处理的注意事项##**如果存在网络传输错误(网络关闭、DNS查找失败等(,则RestResponse.Status将设置为ResponseStatus.error,**否则为ResponsesStatus.Completed。如果API返回404,则ResponseStatus仍将为Completed。如果您需要访问返回的HTTP状态代码,您可以在RestResponse.StatusCode中找到它。status属性是独立于API错误处理的完成指示符。

也就是说,检查RestResponse状态的推荐方法是查看RestResponse.Status

内部Execute调用的源本身如下所示。

private IRestResponse Execute(IRestRequest request, string httpMethod,Func<IHttp, string, HttpResponse> getResponse)
{
    AuthenticateIfNeeded(this, request);
    IRestResponse response = new RestResponse();
    try
    {
        var http = HttpFactory.Create();
        ConfigureHttp(request, http);
        response = ConvertToRestResponse(request, getResponse(http, httpMethod));
        response.Request = request;
        response.Request.IncreaseNumAttempts();
    }
    catch (Exception ex)
    {
        response.ResponseStatus = ResponseStatus.Error;
        response.ErrorMessage = ex.Message;
        response.ErrorException = ex;
    }
    return response;
}

因此,您知道您可以期待标准的.net异常。推荐的用法建议只检查ErrorException的存在,就像代码示例中一样。

//Snippet of code example in above link
var response = client.Execute<T>(request);
if (response.ErrorException != null)
{
    const string message = "Error retrieving response.  Check inner details for more info.";
    var twilioException = new Exception(message, response.ErrorException);
    throw twilioException;
}

如果你想对某类异常进行特定的操作,只需使用下面这样的行来进行类型比较。

if (response.ErrorException.GetType() == typeof(NullReferenceException))
{
  //handle error
}

我怎么能知道所有可能的异常并单独处理它们呢。

老实说,我建议不要单独捕获所有异常,我会发现这个特定的要求有问题。你确定他们不只是想让你优雅地捕捉和处理异常吗?

如果你绝对需要单独处理每个可能的情况,那么我会记录测试中出现的异常,并对照这些异常进行检查。如果你试图抓住所有的东西,你可能会有一百多个不同的例外。这就是Exception基类的作用。

exception类是处理从exception继承的任何内容的catch-all。一般的想法是,你要特别注意那些你实际上可以做的事情,比如通知用户互联网不可用或远程服务器关闭,并让异常类处理任何其他边缘情况。msdn链接