加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# – 从WebRequest获取响应并处理状态代码

发布时间:2020-12-15 06:48:45 所属栏目:百科 来源:网络整理
导读:我正在为.NET应用程序编写一个更新系统,此刻我陷入僵局.我尝试在远程服务器及其内容上获取文件.为此,如果操作失败,我想使用HttpWebRequest获取内容和状态代码. 我构建了一个包含交换机查询的函数,并且每个部分询问状态代码,然后执行一个操作. 这看起来如下:
我正在为.NET应用程序编写一个更新系统,此刻我陷入僵局.我尝试在远程服务器及其内容上获取文件.为此,如果操作失败,我想使用HttpWebRequest获取内容和状态代码.

我构建了一个包含交换机查询的函数,并且每个部分询问状态代码,然后执行一个操作.

这看起来如下:

public void AskStatusCode(int code)
{
  switch (code)
  {
  case 404:
     // Do an action
     break;

  case 405:
     // Do an action
     break;
  }
}

好的,就是这样.现在我创建了一个HttpWebRequest和一个HttpWebResponse.

HttpWebRequest requestChangelog = (HttpWebRequest)HttpWebRequest.Create(url);
requestChangelog.Method = "GET";

HttpWebResponse changelogResponse = (HttpWebResponse)requestChangelog.GetResponse();

// Now call the function and set the status code of the response as parameter.
AskStatusCode((int)changelogResponse.StatusCode);

所以理论应该有效,但不行.对于特殊状态代码,我不会对“case”-block进行任何操作.

我从远程服务器中删除了该文件,以测试它是否会执行代码为“404”的case-block,但它总是显示一个异常(远程服务器回答404),但不是我希望这个状态代码可以处理.

所以,我的问题是,为什么这不行?类型是整数,我将状态代码转换为Int32,您可以看到…

对于您的信息:状态代码已被检查后,如果可以,我想用流读取器和ResponseStream读取内容.

帮助将不胜感激
对不起,如果你不明白,我尽可能的说清楚.

解决方法

您必须检查响应是否由于服务器错误(WebException提供WebResponse)而失败.
也许这将有助于您:
HttpWebResponse response = null;

        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com/thisisadeadlink");
            request.Method = "GET";

            response = (HttpWebResponse)request.GetResponse();

            StreamReader sr = new StreamReader(response.GetResponseStream());
            Console.Write(sr.ReadToEnd());
        }
        catch (WebException e)
        {
            if (e.Status == WebExceptionStatus.ProtocolError)
            {
                response = (HttpWebResponse)e.Response;
                Console.Write("Errorcode: {0}",(int)response.StatusCode);
            }
            else
            {
                Console.Write("Error: {0}",e.Status);
            }
        }
        finally
        {
            if (response != null)
            {
                response.Close();
            }
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读