IIS 7.5 Web 应用程序 returns 使用 HttpClient 时未经授权

IIS 7.5 Web Application returns Unauthorized when using HttpClient

我有一个 Web 应用程序,它托管在 Windows Server 2008 R2 上的 IIS 7.5 中,另一台测试机器上托管在 Windows Server 2012 R2 上的 IIS 8.5 中。 Windows 身份验证已启用,应用程序池在 "DomainName\DomainUsername" 等服务帐户下 运行。

我正在使用小型 C# 控制台测试应用程序实例化 HttpClient 对象并调用网站的控制器操作,例如http://localhost/Api/TestAction。两个测试系统的行为不同,我不明白为什么。

测试用例 1:

HttpClient client = new HttpClient();
var response = client.GetAsync(url).Result;
Console.WriteLine(response.StatusCode); 

测试用例 2:

HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
HttpClient client = new HttpClient(handler);
var response = client.GetAsync(url).Result;
Console.WriteLine(response.StatusCode);

测试用例 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 服务器 2008 R2 (IIS 7.5):

Windows 服务器 2012 R2 (IIS 8.5):

你能帮我理解为什么两个测试系统对测试用例 3(使用 apppool 用户的凭据)给出不同的结果吗?您能否解释一下 "UseDefaultCredentials" 的含义以及这对授权问题有何影响?到目前为止我还没有找到我理解的解释。

谢谢!

OP 在问题下方的讨论中接受的答案涉及使用 三个 个参数而不是两个参数调用 NetworkCredentials 构造函数,第三个参数是域名.

换句话说,这个有效

NetworkCredentials("Username", "Password", "Doamin")

这个没有的地方

NetworkCredentials("Domain\Username", "Password")