HttpWebRequest WebException ProtocolError

时间:2014-09-26 15:19:45

标签: c# asp.net-web-api httprequest

我试图通过HttpWebRequest了解异常处理的一些内容。

我有一个客户端库,它正在向WebAPI控制器发出请求;

HttpWebRequest r = (HttpWebRequest)WebRequest.Create(url);

r.Method = "POST";
r.ContentType = "application/json";

foreach (var header in request.Headers)
{
     r.Headers.Add(header.Key, header.Value.ToString());
}

r.ContentLength = request.RequestBody.Length;

using (StreamWriter writer = new StreamWriter(r.GetRequestStream()))
    writer.Write(request.RequestBody);

我知道请求会抛出异常,并包含消息“entity already exists - 1234”。

当我收到回复时;

using (HttpWebResponse response = (HttpWebResponse)r.GetResponse())
{
    if (response.StatusCode == HttpStatusCode.OK)
        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            return reader.ReadToEnd();

     return "Invalid"; 
 }

我抛出了WebException。因此,请求的调用者在其中有一个try..catch。我得到了WebException。我得到的是协议错误,而不是抛出的500内部服务器错误(使用正确的状态代码来表示稍后的消息)。现在,如果我读取WebException的响应,它确实包含我的消息和堆栈跟踪。

问题

  • 为什么我的响应中没有获得500的状态代码,为什么会抛出协议错误?
  • 是否有更正确的方式处理请求?

我已经搜索过,发现有些人在没有使用正确的标题等时遇到了这个问题。但据我所知,我已经添加了所有标题,但仍然可以获得相同的行为。

1 个答案:

答案 0 :(得分:0)

500 internal server error通常意味着 API收到请求但在处理时发出了未处理的异常,因此出现“内部服务器错误”。

您可以登录数据库或归档所有API的未处理异常,以帮助您进行调试。祝你好运。