WebRequest.Create 抛出 IOException “指定的注册表项不存在。”

Posted

技术标签:

【中文标题】WebRequest.Create 抛出 IOException “指定的注册表项不存在。”【英文标题】:WebRequest.Create throws IOException "The specified registry key does not exist." 【发布时间】:2013-03-25 15:03:01 【问题描述】:

我正在调用这行代码来访问 azure 服务器:

var request = (HttpWebRequest)WebRequest.Create(uri);

并收到此异常。 有人知道如何管理吗?

mscorlib.dll!Microsoft.Win32.RegistryKey.Win32Error(int errorCode, string str) + 0x189 bytes    
mscorlib.dll!Microsoft.Win32.RegistryKey.GetValueKind(string name) + 0x7f bytes 
System.dll!System.Net.HybridWebProxyFinder.InitializeFallbackSettings() + 0xb8 bytes    
System.dll!System.Net.HybridWebProxyFinder.HybridWebProxyFinder() + 0x1e bytes  
[Native to Managed Transition]  
[Managed to Native Transition]  
System.dll!System.Net.HybridWebProxyFinder.HybridWebProxyFinder(System.Net.AutoWebProxyScriptEngine engine) + 0x37 bytes    
System.dll!System.Net.AutoWebProxyScriptEngine.AutoWebProxyScriptEngine(System.Net.WebProxy proxy, bool useRegistry) + 0x190 bytes  
System.dll!System.Net.WebProxy.UnsafeUpdateFromRegistry() + 0x67 bytes  
System.dll!System.Net.WebProxy.WebProxy(bool enableAutoproxy) + 0x44 bytes  
System.dll!System.Net.Configuration.DefaultProxySectionInternal.DefaultProxySectionInternal(System.Net.Configuration.DefaultProxySection section) + 0x3d9 bytes 
System.dll!System.Net.Configuration.DefaultProxySectionInternal.GetSection() + 0xbe bytes   
System.dll!System.Net.WebRequest.InternalDefaultWebProxy.get() + 0x7e bytes 
System.dll!System.Net.HttpWebRequest.HttpWebRequest(System.Uri uri, System.Net.ServicePoint servicePoint) + 0x18d bytes 
System.dll!System.Net.HttpRequestCreator.Create(System.Uri Uri) + 0x50 bytes    
System.dll!System.Net.WebRequest.Create(System.Uri requestUri, bool useUriBase) + 0x2ec bytes   
System.dll!System.Net.WebRequest.Create(string requestUriString) + 0xa3 bytes   

【问题讨论】:

好的,LegacyWPADSupport 的解决方案似乎有所帮助,尽管我们有不同的调用堆栈。 你解决过这个问题吗? 是的。这个解决方案对***.com/questions/13141434/… 有帮助,尽管我们有不同的调用堆栈。 @AlexBlokha,您能否分享对您有用的答案并将问题标记为已回答? 【参考方案1】:

这个解决方案对 HttpClient request throws IOException 有帮助,尽管我们有不同的调用堆栈。

您需要在注册表中创建这些键。

路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

键:

名称:“LegacyWPADSupport”类型:“dword”数据:00000000

路径:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework

键:

名称:“LegacyWPADSupport”类型:“dword”数据:00000000

【讨论】:

为了完整起见,密钥位于:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 和 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework 谢谢。格式已经吃掉了点 (\.) 之前的斜线。我已经编辑了答案,以便正确显示。

以上是关于WebRequest.Create 抛出 IOException “指定的注册表项不存在。”的主要内容,如果未能解决你的问题,请参考以下文章

.NET 抛出 WebException 而不是设置 StatusCode

C#使用WebClient与WebRequest有啥不同

C#使用WebRequest调用WebApi的方法

检测 WebRequest 的 HTTP 代理错误

WebRequest“HEAD”轻量级替代品

c# webrequest无响应