我正在使用 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
?
请您参考如下方法:
errorDetail 不是 HTTP 规范的一部分,因此 WebClient 不知道它。出于同样的原因,您不会在 BCL 的任何地方找到它。
您可能想要的是响应主体,以便您可以解析它(可能是 JSON?您的数据看起来像它)。
您可以从WebException.Response 中获取响应对象。像平常阅读回复一样阅读它。
请注意,如果没有响应(例如由于网络错误),此属性可能为 null。
