我的情况是,当我从服务器获得HTTP 400代码时,服务器会以完全合法的方式告诉我请求有什么问题(使用HTTP响应内容中的消息)
然而,事实并非如此.NET HttpWebRequest在状态代码为400时引发异常.
我该怎么处理这件事?对我来说,400美元是完全合法的,而且相当有帮助.HTTP内容有一些重要信息,但是这个异常让我迷失了方向.
我的情况是,当我从服务器获得HTTP 400代码时,服务器会以完全合法的方式告诉我请求有什么问题(使用HTTP响应内容中的消息)
然而,事实并非如此.NET HttpWebRequest在状态代码为400时引发异常.
我该怎么处理这件事?对我来说,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
以确保获得整个错误.