【问题标题】:C# Exceptions Not Being Handled未处理的 C# 异常
【发布时间】:2015-06-01 23:31:38
【问题描述】:

通过浏览器调用以下代码,如果发生异常,则“Try Catch”永远不会捕获该异常,而是将异常报告给屏幕。我试过在不调试的情况下运行以及关闭 CLR 错误。任何建议将不胜感激:

   public string GetUrl(string url)
    /*Grab remote page */
    {

        string target = string.Empty;
        HttpWebRequest httpWebRequest = null;
        HttpWebResponse response = null;
        StreamReader streamReader = null;
        try
        {

        httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
        response = (HttpWebResponse)httpWebRequest.GetResponse();

       streamReader = new StreamReader(response.GetResponseStream(), true);

                target = streamReader.ReadToEnd();



        }
        catch (WebException e)
        {
            Console.WriteLine("Error:GetUrl()");
            Console.WriteLine("\n{0}", e.Message);
            Console.WriteLine("\n{0}", e.Status);
        } 
        finally
        {
            streamReader.Close();
                response.Close();

        }

        return target;


    }

【问题讨论】:

  • 您在哪一行得到了异常?你调试了吗?如果您在关闭阅读器的 finally 块中获得它,它不会抓住它。
  • 第一个异常在try之后立即发生
  • streamReader 在你的 finally 块上可以为 null,如果你得到 404 会抛出另一个异常。
  • url 字符串是什么?

标签: c# debugging error-handling


【解决方案1】:

您只捕获 webexceptions,不会捕获任何其他异常。

它可以抛出更多异常,请参见此处:

https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse%28v=vs.110%29.aspx

【讨论】:

  • 对不起菲利普你的建议真的没有任何区别尝试捕获(异常 e)。
【解决方案2】:

在 finally 块和陷阱基 Excaption 之前再添加一个 catch 块。它将捕获所有类型的错误发生并且未在早期的 catch 块中捕获。

【讨论】:

  • 没什么区别阿努普:
  • 报屏的异常是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多