【问题标题】:410 code not getting captured but throwing error instead410 代码没有被捕获,而是抛出错误
【发布时间】:2013-06-14 12:03:00
【问题描述】:

我得到了这段代码,它试图捕获 410 代码,但它在第一行抛出错误并且没有通过其余代码,

 HttpWebResponse response = (HttpWebResponse)request.GetResponse();

 if (response.StatusCode == HttpStatusCode.NotFound || response.StatusCode == HttpStatusCode.Gone)
            {

还有什么方法可以捕获除上述之外的 410 代码吗?

在下方答案的帮助下回答代码

  try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
               if (((HttpWebResponse)(ex.Response)).StatusCode == HttpStatusCode.NotFound || ((HttpWebResponse)(ex.Response)).StatusCode == HttpStatusCode.Gone)
                {

【问题讨论】:

    标签: c# web-services http stream httpwebrequest


    【解决方案1】:

    这就是GetResponse 方法的工作原理。获取不到代码200时抛出异常。

    尝试将您的request.GetResponse() 放入try .. catch 块中。抓住WebException。在catch 子句中,您可以处理状态码不是200 的情况。

    try 
    {
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    } 
    catch(Exception ex)
    {
        var exStatusCode = ex.Code //check the status code against this
        var exResponse = ex.Response //use your response like this
    }
    

    【讨论】:

    • 所以在我使用的 catch 块中,如果 (ex.StatusCode == HttpStatusCode.Gone ,抱歉不确定,示例代码可以完成这项工作,谢谢 :)
    • 如果我放入 catch 块我得到这个,使用未分配的局部变量 'response'
    • 你不应该使用response,因为你没有正确理解这一点。改用WebException.Response,所以如果你将异常变量命名为ex,你应该使用ex.Response
    • 错误 2 运算符“==”不能应用于“System.Net.WebResponse”和“System.Net.HttpStatusCode”类型的操作数
    • 要与状态码进行比较,请使用ex.Code,就像我在答案中发布的示例一样。
    猜你喜欢
    • 2023-03-28
    • 2014-06-30
    • 2015-04-16
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2014-02-25
    • 2023-02-06
    • 2020-10-17
    相关资源
    最近更新 更多