【问题标题】:C# webrequests->getresponse casts exception instead of returning status codeC# webrequests->getresponse 抛出异常而不是返回状态码
【发布时间】:2021-01-08 12:06:14
【问题描述】:

我正在尝试制作图像抓取工具,现在对于某些页面未指定图像,因此我想根据访问页面时收到的状态代码解析我的输出,但是当我尝试削减我的状态代码时如果找不到页面,则获取异常而不是状态码,知道为什么会发生这种情况吗?

        if (gameinfo != null)
            if (!string.IsNullOrEmpty(gameinfo.image_uri))
                try
                {
                    using (System.Net.WebClient client = new System.Net.WebClient())
                    {
                        // Build Uri and attempt to fetch a response.
                        UriBuilder uribuild = new UriBuilder(gameinfo.image_uri);
                        WebRequest request = WebRequest.Create(uribuild.Uri);
                        HttpWebResponse response = request.GetResponse() as HttpWebResponse;

                        switch (response.StatusCode)
                        {
                            // Page found and valid entry.
                            case HttpStatusCode.OK:
                                using (Stream stream = client.OpenRead(uribuild.Uri))
                                {
                                    Console.WriteLine(String.Format("Downloading {0}", uribuild.Uri));
                                    System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream);
                                    bitmap.Save(System.IO.Path.Combine(rom_root, String.Format("{0}.jpg", file_name.Substring(2).Split('.').First())));
                                }
                                break;
                            // Unspecified status codes.
                            default:
                                Console.WriteLine("Unspecified status code found, aborting...");
                                break;
                        }
                    }
                } catch(System.Net.WebException ex)
                {
                    // Should be moved to switch with HttpStatusCode.NotFound ^
                    Console.WriteLine("Image page not found.");
                }

【问题讨论】:

    标签: c# system.net.webexception system.net.httpwebrequest


    【解决方案1】:

    这就是GetResponse() 的实现方式。如果响应不是成功,则抛出 WebException

    我同意,我觉得这有点奇怪——如果它至少是可选行为就好了。 幸运的是,您可以从正在抛出的WebException 中读取状态代码:

    ....
    catch (WebException e)
    {
        using (WebResponse response = e.Response)
        {
            HttpWebResponse httpResponse = (HttpWebResponse) response;
            var statusCode = httpResponse.StatusCode;
            // Do stuff with the statusCode
        }
    }
    

    【讨论】:

    • 嗯,多么奇怪的实现,感谢您的响应,不知道您可以通过这种方式捕获响应:)
    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多