我的情况是,当我从服务器获取 HTTP 400 代码时,服务器告诉我我的请求出了什么问题是一种完全合法的方式(使用 HTTP 响应内容中的消息)
但是,当状态码为 400 时,.NET HttpWebRequest 会引发异常。
我该如何处理?对我来说,400 是完全合法的,而且很有帮助。HTTP 内容包含一些重要信息,但异常使我偏离了我的道路。
如果有某种方法可以关闭“抛出不成功的代码”,那就太好了,但是如果你捕捉到 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以确保获得整个错误。
HttpWebRequest.DefaultMaximumErrorResponseLength