如何在使用c# WebClient并获得异常时显示可选字段

本文关键字:异常 显示 字段 WebClient | 更新日期: 2023-09-27 17:49:35

我使用WebClient做一个POST到服务器,像这样:

string URI = "http://mydomain.com/foo";
string myParameters =
   "&token=1234" +
   "&text=" + HttpUtility.UrlEncode(someVariable);
using (WebClient wc = new WebClient())
{
    try
    {
      wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
      string HtmlResult = wc.UploadString(URI, myParameters);
    }
    catch (WebException e)
    {
        return e.Message;
    }
}

我有时可以得到异常抛出由于HTTP 403(禁止)。在这种情况下,我想知道确切的原因。深入到我调用的服务中,它将可选地返回一个errorDetail字段,如下所示:

"code": 403,
"errorType": "not_authorized",
"errorDetail": "Can reply on a checkin at most once."

然而,当我在Visual Studio中步进代码时,我不知道如何获得errorDetail字段。它似乎不是WebException的一部分。

是否有办法得到它,这样我就可以显示如下内容:

return e.Message + " -- " + e.errorDetail

?

如何在使用c# WebClient并获得异常时显示可选字段

errorDetail不是HTTP规范的一部分,因此WebClient不知道它。出于同样的原因,您将在BCL中找不到它。

你可能想要的是响应体,所以你可以解析它(可能是JSON?

您可以从WebException.Response获得响应对象。就像你平时读回复一样读。

请注意,如果没有响应(例如,由于网络错误),该属性可能为空。