.NET 4.6.2“值”不能为空;WebRequest.GetResponse()异常

本文关键字:WebRequest GetResponse 异常 不能 NET | 更新日期: 2023-09-27 18:15:51

当我在。net 4.6.2上运行以下代码时,

var req = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
req.Method = "POST";
req.ContentType = "application/json";
req.Headers.Add("Authorization", "key=my real key is here");
string json = "{'r'n  '"to'": '"/topics/news'",'r'n  '"data'": {'r'n    '"item0'": '"0'",'r'n    '"item1'": '"1'"'r'n  }'r'n}";
var jsonbytes = Encoding.UTF8.GetBytes(json);
var reqStr = req.GetRequestStream();
reqStr.Write(jsonbytes, 0, jsonbytes.Length);
reqStr.Close();
var res = (HttpWebResponse)req.GetResponse();
Debug.WriteLine(res.StatusCode);
var sr = new StreamReader(res.GetResponseStream());
Debug.Write(sr.ReadToEnd());
sr.Close();

以下异常发生在var res = (HttpWebResponse)req.GetResponse(); .

Exception   Exception thrown: 'System.ArgumentNullException' in mscorlib.dll ("Value cannot be null.")  System.ArgumentNullException

我无法得到更多的信息。我不知道什么值是空的。我在。net 4.5.2上运行相同的代码,该异常没有发生。为什么会出现这种异常?

.NET 4.6.2“值”不能为空;WebRequest.GetResponse()异常

出现这种情况是因为4.6.2中添加了一些代码,这些代码使用try/catch从注册表中的字符串解析enum,显然大多数人都没有。

连接的一个问题已经打开了,但像往常一样,它将无处可去,并被关闭,因为5年内不会修复。

我不明白他们为什么不用TryParse。我不明白为什么他们在Visual Studio中异常支持这么差的情况下编写了这么多基于异常的代码。现在我每次开始我的项目都失去了30秒,因为我在初始化开始时就中断了-禁用ArgumentNullException对我来说不是一个选项,如果它发生在我的应用程序代码中,我想立即中断。

我认为在Visual Studio 2017中,您将最终能够禁用每个程序集的异常,所以如果这让您感到太困扰,请随时下载预览

确保req.GetResponse()在您将其转换为HttpWebResponse之前实际返回一个值-因此首先获得值,做空检查然后转换,如果它有值。关于。net 4.5.2,这取决于req.GetResponse()在没有收到来自服务器的响应时返回null或不返回null。4.6和4.5.2中的实现可能有所不同

底线是-如果你不确定它是否有值,不要强制转换值,并使用调试器逐步检查你的代码

在我安装SQL Server Management Studio (SSMS)之前,响应对我来说是完美的。看起来是SSMS破坏了它。

我修改了我的代码,使用。net的低版本,这解决了问题。