WebRequest request = HttpWebRequest.Create(url);
var credentialCache = new CredentialCache();
credentialCache.Add(
new Uri(url), // request url
"Digest", // authentication type
new NetworkCredential("user", "password") // credentials
);
request.Credentials = credentialCache;
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于没有URL参数的URL.例如,我可以下载http://example.com/test/xyz.html得很好,但是当我尝试下载时http://example.com/test?page=xyz,结果是400 Bad Request消息,服务器日志中包含以下内容(运行Apache 2.2):
Digest: uri mismatch - </test> does not match request-uri </test?page=xyz>
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是摘要规范要求从摘要哈希中删除URL参数 - 但是从传递给的URL中删除参数credentialCache.Add()并没有改变事物.所以它必须是相反的方式,在.NET框架中的某个地方错误地从URL中删除参数.