我正在为.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(); } }