我们编码实现请求一个页面时,请求的代码类似如下代码:
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";
if (header != null && header.Count != 0)
{
foreach (var item in header)
{
request.Headers.Add(item.Key, item.Value);
}
}
byte[] byteData = Encoding.UTF8.GetBytes(jsonParam);
int length = byteData.Length;
request.ContentLength = length;
Stream writer = request.GetRequestStream();
writer.Write(byteData, 0, length);
writer.Close();
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
return responseString.ToString();
这里抛出异常:远程服务器返回错误: (500) 内部服务器错误。
需要把
var response = (HttpWebResponse)request.GetResponse();
改成
HttpWebResponse res;
try
{
res = (HttpWebResponse)req.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}
就可以了。
分析原因:
(HttpWebResponse)req.GetResponse(); 这行代码中做了如下一件事情:
当服务器段ASP.net程序有 Exception 发生时,客户端应用程序接受了HTTP 协议错误后。把这个HTTP 协议错误转换成 Status 设置为 WebExceptionStatus.ProtocolError 的 WebException,并且把这个异常throw出来。