HttpWebRequest DefaultNetworkCredentials 给出错误 401

Jer*_*Lam 5 c# asp.net credentials httpwebrequest networkcredentials

我正在尝试使用HttpWebRequest请求需要 Windows 身份验证的 url ,我正在使用

request.Credential = New NetworkCredential("username", "password");
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我决定不硬记录用户名和密码,然后切换到

request.Credential = CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)

然后我得到了 401 未经身份验证的错误。我检查了我的用户

WindowsIdentity.GetCurrent();
Run Code Online (Sandbox Code Playgroud)

它正确返回我的用户名,但是

CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)

返回我的用户名、域的空字符串...几乎所有内容都是空字符串.. 太糟糕了HttpWebRequest.Credential期待ICredential意味着我无法将WindowsIdentity.GetCurrent()设置为它。

无论如何,我可以将我当前的登录用户传递给HttpWebRequest.Credential吗?

CredentialCache.DefaultNetworkCredentials; 正确的方法?或者我只是缺少一些设置?

我已经阅读了一些像这样的文章 http://msdn.microsoft.com/en-us/library/ms998351.aspx

它要么太长太复杂,我无法理解,要么不起作用。我是新手,希望在这里得到一些直接的答案。

Kai*_*ann 1

如果您使用基本身份验证,那么这将不起作用。请参阅此问题:HttpWebRequest with basic authentication failed with 401 erorr for DefaultNetworkCredentials

这篇微软文章指出,DefaultCredentials 仅适用于 NTLM、协商和基于 Kerberos 的身份验证。 http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultcredentials.aspx

出于信息目的,这是一篇简短解释身份验证方法的文章:http://msdn.microsoft.com/en-us/library/ms789031.aspx