2

我正在使用 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

?

4

1 回答 1

0

errorDetail不是 HTTP 规范的一部分,所以WebClient不知道。出于同样的原因,您在 BCL 中的任何地方都找不到它。

您可能想要的是响应正文,以便您可以解析它(可能是 JSON?您的数据看起来像它)。

您可以从中获取响应对象WebException.Response。就像您通常阅读回复一样阅读它。

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

于 2012-12-24T13:19:51.307 回答