我有一个Web应用程序,它托管在Windows Server 2008 R2上的IIS 7.5和Windows Server 2012 R2上的IIS 8.5中的另一台测试机器上。 Windows身份验证已启用,应用程序池在“DomainName \ DomainUsername”等服务帐户下运行。
我正在使用一个小型C#控制台测试应用程序来实例化HttpClient对象并调用网站的控制器操作,例如http://localhost/Api/TestAction。两个测试系统的行为都不同,我不明白为什么。
TestCase 1:
HttpClient client = new HttpClient();
var response = client.GetAsync(url).Result;
Console.WriteLine(response.StatusCode);
TestCase 2:
HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
HttpClient client = new HttpClient(handler);
var response = client.GetAsync(url).Result;
Console.WriteLine(response.StatusCode);
TestCase 3:
HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential(username, password);
HttpClient client = new HttpClient(handler);
var response = client.GetAsync(url).Result;
Console.WriteLine(response.StatusCode);
结果如下:
Windows Server 2008 R2(IIS 7.5):
Windows Server 2012 R2(IIS 8.5):
您能否帮我理解为什么两个测试系统为测试案例3提供不同的结果(使用apppool用户的凭据)?您能否解释一下“UseDefaultCredentials”的含义以及这对授权问题有何影响?到目前为止,我还没有找到我理解的解释。
谢谢!
答案 0 :(得分:1)
OP在下面的讨论中接受的答案涉及使用三个参数调用NetworkCredentials
构造函数而不是两个,第三个是域名。
换句话说,这个工作
NetworkCredentials("Username", "Password", "Doamin")
这个人没有
NetworkCredentials("Domain\Username", "Password")