繁体   English   中英

如何处理Web API控制器引发的异常?

[英]How to deal with exception thrown by Web API controller?

我正在使用Enterprise Tester API导入和更新Web应用程序上的内容。 该程序可以正常工作几个小时,但偶尔会遇到此未处理的异常:

EnterpriseTester.API.Client.dll中发生了类型为'System.Net.Http.HttpRequestException'的未处理异常

附加信息:System.Net.Http.HttpRequestException状态码不表示成功:500(内部服务器错误)

此时,Visual Studio在发生此异常的行处中断。 但是,当我单击“继续”时,程序将再次正常执行。

通过在互联网上搜索,似乎我应该使用try catch块来处理异常。 我还希望能够稍等片刻,然后再次执行同一行以访问API。

    try
    {
        client.UpdateScriptRun(Id,Run);
    }
    catch (HttpRequestException e)
    {
        Console.Writeline("HttpRequestException: {0}", e.Message);
        Thread.Sleep(1000);
        client.UpdateScriptRun(Id,Run);
     }

我不确定是否可以通过这种方式解决此问题,或者我是否需要研究完全不同的解决方案。

如果您能指导我找到适合该问题的解决方案,将不胜感激。 谢谢!

通常,最好跟踪异常的根本原因,并查看是否有解决方法。 如果只是由于网络间歇性问题而发生连接错误,那是一回事,但是500错误表明服务器上出现了问题。 如果您有任何方法可以跟踪并修复服务器端错误,那是最好的方法。

如果您对服务器没有控制权,并且只是想让自己的应用程序正常工作,并且知道服务器偶尔会无故失败,那么尝试/捕获解决方案将有所帮助。 不过,我会提出一些其他建议:

  1. 使用更强大的日志记录机制,因此您可以从日志文件中判断出出错的频率,并可以使用该信息来跟踪问题。 万一信息有用,请在日志消息中包含参数。
  2. 创建一个帮助程序方法来帮助您重试,以便您可以在其他地方重用该模式。
  3. 在这种辅助方法中,首先几乎立即重试,然后等待成倍增长的时间段(10ms,100ms,1000ms),直到看到成功或达到合理的最大限制为止。
  4. 无论使用什么代码,都应使用自己的try / catch来确保在事情无法正常进行时用户具有良好的体验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM