Skip to main content
 首页 » 编程设计

c#之使用 C# WebClient 并获取异常时,如何在响应中显示可选字段

2024年01月01日49xxx_UU

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