我正在使用System.Net.WebRequest从某些API获取信息。当我遇到错误时,响应仅包含基本的HttpStatusCode和消息,而不是完整的错误返回值。相比之下,如果在像POSTMAN这样的工具中运行相同的POST数据和标头,则会从该API返回完整的错误。
我想知道是否有某种属性或方法可以获取完整的错误响应?
以下是我正在运行的代码:
public HttpStatusCode GetRestResponse(
string verb,
string requestUrl,
string userName,
string password,
out string receiveContent,
string postContent = null)
{
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Method = verb;
if (!string.IsNullOrEmpty(userName))
{
string authInfo = string.Format("{0}:{1}", userName, password);
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
request.Headers.Add("Authorization", "Basic " + authInfo);
}
if (!string.IsNullOrEmpty(postContent))
{
byte[] byteArray = Encoding.UTF8.GetBytes(postContent);
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = byteArray.Length;
var dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
}
try
{
using (WebResponse response = request.GetResponse())
{
var responseStream = response.GetResponseStream();
if (responseStream != null)
{
var reader = new StreamReader(responseStream);
receiveContent = reader.ReadToEnd();
reader.Close();
return ((HttpWebResponse) response).StatusCode;
}
}
}
catch (Exception ex)
{
receiveContent = string.Format("{0}\n{1}\nposted content = \n{2}", ex, ex.Message, postContent);
return HttpStatusCode.BadRequest;
}
receiveContent = null;
return 0;
}
当我发出一个请求出现错误时,错误消息会显示:The remote server returned an error: (400) Bad Request.
没有InnerException,也没有其他任何有用的异常信息。
[回答] @Rene指出了正确的方向,可以通过以下方式获取适当的响应正文:
var reader = new StreamReader(ex.Response.GetResponseStream());
var content = reader.ReadToEnd();
new StreamReader(((((HttpWebResponse)ex.Response))).m_ConnectStream).ReadToEnd()
,似乎可以解决问题。我马上会更新。 - AlexD