小编典典

.Net HttpWebRequest.GetResponse() 在返回 http 状态代码 400(错误请求)时引发异常

all

我的情况是,当我从服务器获取 HTTP 400 代码时,服务器告诉我我的请求出了什么问题是一种完全合法的方式(使用 HTTP 响应内容中的消息)

但是,当状态码为 400 时,.NET HttpWebRequest 会引发异常。

我该如何处理?对我来说,400 是完全合法的,而且很有帮助。HTTP 内容包含一些重要信息,但异常使我偏离了我的道路。


阅读 57

收藏
2022-06-11

共1个答案

小编典典

如果有某种方法可以关闭“抛出不成功的代码”,那就太好了,但是如果你捕捉到 WebException,你至少可以使用响应:

using System;
using System.IO;
using System.Web;
using System.Net;

public class Test
{
    static void Main()
    {
        WebRequest request = WebRequest.Create("http://csharpindepth.com/asd");
        try
        {
            using (WebResponse response = request.GetResponse())
            {
                Console.WriteLine("Won't get here");
            }
        }
        catch (WebException e)
        {
            using (WebResponse response = e.Response)
            {
                HttpWebResponse httpResponse = (HttpWebResponse) response;
                Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
                using (Stream data = response.GetResponseStream())
                using (var reader = new StreamReader(data))
                {
                    string text = reader.ReadToEnd();
                    Console.WriteLine(text);
                }
            }
        }
    }
}

您可能希望将“即使不是成功代码也给我回复”位封装在单独的方法中。(如果没有响应,我建议你仍然抛出,例如,如果你无法连接。)

如果错误响应可能很大(这是不寻常的),您可能需要调整HttpWebRequest.DefaultMaximumErrorResponseLength以确保获得整个错误。

2022-06-11