我试图了解有关使用HttpWebRequest进行异常处理的知识。

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

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);

我知道请求将引发异常,并包含消息“实体已存在-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。我得到的是协议(protocol)错误,而不是引发的500内部服务器错误(稍后使用正确的状态代码表示消息)。现在,如果我阅读了WebException的Response,它确实包含了我的消息和stacktrace。

问题
  • 为什么我的响应中没有得到状态码500,为什么会引发协议(protocol)错误?
  • 是否有更正确的方式处理请求?

  • 我四处搜寻,发现有些人在使用不正确的标题等时遇到了这个问题。但是据我所知,我添加了所有可以并且仍然具有相同行为的标题。

    最佳答案

    500 internal server error通常意味着 API已接收到该请求,但在处理时抛出了未处理的异常,即“内部服务器错误”。

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

    关于c# - HttpWebRequest WebException ProtocolError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26062931/

    10-13 01:11