2017-02-15 50 views
0

我有一个方法,我在WebClient上调用DownloadData。由于URL返回404,因此此方法会引发异常。由于资源不存在,所有这一切都符合规范。无法构建WebException

Web客户端将抛出一个WebException,我必须从respose中读取正文,因为它包含具有详细错误的JSON对象。之后,我必须再次抛出WebException,因为该层仍然期望WebException。目前,我试图构建一个与引发WebException从当前的具体情况如下:

catch(WebException ex) 
{ 
    var response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(); 
    dynamic error = JsonConvert.DeserializeObject(response); 
    throw new WebException(error.message, null, ex.Status, ex.Response); 
} 

问题是,我得到一个异常,而兴建引发WebException。这是消息!

最好重载方法匹配 'System.Net.WebException.WebException(字符串, System.Net.WebExceptionStatus,System.Net.WebExceptionInternalStatus, System.Exception的)' 具有一些无效参数

这就像这个构造函数不存在!检查异常中的构造函数并检查catch块中的构造函数。

正如你所看到的,我使用了一个有效的构造函数。检查here

这里发生了什么?

+0

读取错误,你的参数,你是通过不正确的 –

+0

尝试铸造你的'null' - 听起来不可思议,我知道,但是这可以通过重载帮助(如果这是真正问题所在)。 –

+0

也尝试使用'string message = error.message;'然后使用它 - 以便重载解析将在编译时而不是在执行时发生。 –

回答

1

问题是,你需要将error.message作为字符串。如果你以不同的方式处理该字符串会更好,所以你可以验证error.message是否存在。

catch(WebException ex) 
{ 
    var response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(); 
    dynamic error = JsonConvert.DeserializeObject(response); 
    throw new WebException((string)error.message, null, ex.Status, ex.Response); 
} 
+0

这是正确的。谢谢! – Rob

+0

正如我所说,尝试添加错误对象的addtional检查,因为它可能不包含消息属性,然后你将有另一个异常:) – MaticDiba