我刚刚发现了一个奇怪的行为,我想知道是否有人能解释为什么我的代码会这样。
我的场景是这样的:我有两个rest api是用c创建的,我们称它们为coreapi和frontapi。两个api在同一服务器上都有单独的站点和apppool,并且两个apppool都作为networkservice运行。frontapi使用httpclient调用coreapi。我通过调用frontapi的valuescontroller来触发调用,后者反过来调用coreapi。CoreAPI已启用Windows身份验证,而FrontAPI具有匿名身份验证。
如果我在我的开发机器上托管frontapi,一切都可以正常工作,但是当使用完整的url在同一台服务器上同居时,当frontapi调用coreapi时,会导致401.0未经授权。当使用frontapi中的“http://localhost/api/values”时,它工作正常。
有什么想法吗?
HttpClientHandler authHandler = new HttpClientHandler()
{
Credentials = CredentialCache.DefaultNetworkCredentials
};
using (HttpClient confClient = new HttpClient(authHandler))
{
HttpResponseMessage message = await confClient.GetAsync("http://mysite.acme.com/api/values");
if (message.IsSuccessStatusCode)
{
result = await message.Content.ReadAsStringAsync();
}
else
result = message.StatusCode.ToString();
}
最佳答案
CredentialCache.DefaultNetworkCredentials属性返回运行FrontAPI IIS应用程序池的凭据。coreapi不知道如何验证frontapi的applicationpoolidentity,但应该能够验证networkservice。
如果将应用程序池标识从applicationpoolidentity更改为networkservice,则可以修复来自coreapi的401响应。
关于c# - 使用HttpClient在本地主机上调用rest api导致401未经授权的IIS 8.5,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47673719/