首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Net.WebException HTTP状态代码

System.Net.WebException HTTP状态代码
EN

Stack Overflow用户
提问于 2010-09-01 07:49:36
回答 6查看 121.9K关注 0票数 163

有没有一种简单的方法可以从System.Net.WebException中获取HTTP状态代码

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-01 08:04:18

也许就像这样..。

代码语言:javascript
复制
try
{
    // ...
}
catch (WebException ex)
{
    if (ex.Status == WebExceptionStatus.ProtocolError)
    {
        var response = ex.Response as HttpWebResponse;
        if (response != null)
        {
            Console.WriteLine("HTTP Status Code: " + (int)response.StatusCode);
        }
        else
        {
            // no http status code available
        }
    }
    else
    {
        // no http status code available
    }
}
票数 263
EN

Stack Overflow用户

发布于 2017-01-17 21:31:55

通过使用null-conditional operator (?.),您可以通过一行代码获得HTTP状态代码:

代码语言:javascript
复制
 HttpStatusCode? status = (ex.Response as HttpWebResponse)?.StatusCode;

变量status将包含HttpStatusCode。如果出现更常见的故障,如网络错误,没有发送任何HTTP状态代码,则status将为null。在这种情况下,您可以检查ex.Status以获取WebExceptionStatus

如果您只需要一个描述性字符串在失败的情况下记录,您可以使用null-coalescing operator (??)来获取相关错误:

代码语言:javascript
复制
string status = (ex.Response as HttpWebResponse)?.StatusCode.ToString()
    ?? ex.Status.ToString();

如果异常是作为404HTTP状态代码的结果抛出的,则字符串将包含"NotFound“。另一方面,如果服务器离线,字符串将包含"ConnectFailure“,依此类推。

(对于任何想知道如何获得HTTP子状态代码的人来说。这是不可能的。它是一个Microsoft IIS概念,只在服务器上登录,而不会发送到客户端。)

票数 28
EN

Stack Overflow用户

发布于 2017-10-18 20:55:59

(我确实意识到这个问题很古老,但它是谷歌上最热门的问题之一。)

您想知道响应代码的常见情况是在异常处理中。在C# 7中,如果异常与您的谓词匹配,则可以使用模式匹配来实际输入catch子句:

代码语言:javascript
复制
catch (WebException ex) when (ex.Response is HttpWebResponse response)
{
     doSomething(response.StatusCode)
}

这可以很容易地扩展到更深一层,例如在这种情况下,WebException实际上是另一个的内部异常(我们只对404感兴趣):

代码语言:javascript
复制
catch (StorageException ex) when (ex.InnerException is WebException wex && wex.Response is HttpWebResponse r && r.StatusCode == HttpStatusCode.NotFound)

最后:请注意,当catch子句与您的条件不匹配时,不需要在catch子句中重新抛出异常,因为我们没有在上面的解决方案中首先输入该子句。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3614034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档