webException状态属性如果错误则打印错误否则成功

时间:2015-08-18 19:13:44

标签: c# .net

我已经完成了这段代码

  try {

//为无效网站创建网络请求。使用无效名称替换“创建”调用中的“无效站点”。

       HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("invalid site");

//获取上述请求的相关响应。

       HttpWebResponse myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse();
   myHttpWebResponse.Close();
 }
  catch(WebException e) {
Console.WriteLine("This program is expected to throw WebException on successful run."+"\n\nException Message :" + e.Message);
if(e.Status == WebExceptionStatus.ProtocolError) {
    Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
    Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
}
}
  catch(Exception e) {
Console.WriteLine(e.Message);
}

1 个答案:

答案 0 :(得分:1)

根据您的问题和评论,我假设您正在寻找类似的内容:

try
{
    HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://httpstat.us/500");
    using (HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse())
    {
        myHttpWebResponse.Close();
        int code = (int)myHttpWebResponse.StatusCode;
        if (code == 200)
        {
            Console.WriteLine("success");
        }
        else
        {
            Console.WriteLine("success with code {0}", code);
        }
    }
}
catch (WebException e)
{
    if (e.Status == WebExceptionStatus.ProtocolError)
    {
        // protocol errors find the statuscode in the Response
        // the enum statuscode can be cast to an int.
        int code = (int) ((HttpWebResponse)e.Response).StatusCode;
        throw new Exception(string.Format("Status code {0} ", code)); 
    }
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

您可以捕获异常,检查或转换它提供的值并抛出新的异常。

您没有提供很多上下文,但让我警告您,抛出异常来处理常见的业务逻辑并不是最佳做法。您最好重构一个返回状态代码的设计,以便代码的调用者可以使用它而不必实现try / catch。 Read this msdn document获取更多指导,以及Eric Lippert中有关该主题的博客。