我正在尝试使用NetworkCredential类通过ASP.NET访问网页。但是,我通过以下消息System.Security.Cryptography.CryptographicException: The handle is invalid
下面是关于我如何调用该函数的代码。非常感谢任何帮助。
C#:
System.Net.WebClient client = new System.Net.WebClient();
client.Credentials = new System.Net.NetworkCredential("Admin", "Nimda");
堆栈跟踪
[CryptographicException: The handle is invalid.
]
System.Security.SecureString.ProtectMemory() +154
System.Security.SecureString.InitializeSecureString(Char* value, Int32 length) +170
System.Security.SecureString..ctor(Char* value, Int32 length) +65
System.Net.SecureStringHelper.CreateSecureString(String plainString) +6181188
System.Net.NetworkCredential..ctor(String userName, String password) +64
答案 0 :(得分:5)
我刚刚遇到同样的问题。我在VS 2010中的ASP.NET开发服务器下本地发生。当我在Windows 7 / IIS 7下执行应用程序时,它运行得很好。希望这有帮助!
答案 1 :(得分:4)
好的,这有点尴尬 - 我看了一下,错误是你的Windows配置....某处。
抛出异常的代码部分实际上是对advapi32.dll中函数的互操作,具体来说是:
int status = Win32Native.SystemFunction040(this.m_buffer, (uint) (this.m_buffer.Length * 2), 0);
if (status < 0)
{
throw new CryptographicException(Win32Native.LsaNtStatusToWinError(status));
}
this.m_encrypted = true;
呼叫:
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), DllImport("advapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
internal static extern int SystemFunction040([In, Out] SafeBSTRHandle pDataIn, [In] uint cbDataIn, [In] uint dwFlags);
返回错误代码,导致异常。
如果你在工作场所,你可能想与你的系统管理员/网络人员交谈,看看你的本地政策中是否有任何可能导致失败的事情。 否则,我会看到如果禁用防病毒/禁用防火墙/关闭任何第三方代理软件会发生什么。
基本上,任何覆盖默认网络功能的东西。 此外,可能值得检查您是否拥有所有最新的Windows更新,并且不感染了任何病毒或恶意软件。
抱歉,我不能更具体,但我不相信这是.Net /编程错误。
答案 2 :(得分:0)
这应该在标准的PowerShell控制台中运行:
Add-Type -AssemblyName System.Net
$client = New-Object System.Net.WebClient
$netc = New-Object System.Net.NetworkCredential("Admin", "Nimda")
$client.Credentials = $netc
看看这是否会产生相同的无效句柄错误会很有趣。
编辑:道歉,第二行有一个拼写错误。