C# .NET Core-在IIS上通过Windows身份验证从MVC应用程序调用Web API会导致HttpRequestException 401(未经授权)状态代码

C# .NET Core-在IIS上通过Windows身份验证从MVC应用程序调用Web API会导致HttpRequestException 401(未经授权)状态代码,c#,authentication,iis,asp.net-core-mvc,asp.net-core-webapi,C#,Authentication,Iis,Asp.net Core Mvc,Asp.net Core Webapi,我正在.NETCore1.1上开发一个web应用程序,既有web API,也有MVC应用程序。当应用程序托管在IIS上时,我尝试从应用程序内部调用Web API时遇到了一个问题 我在同一个IIS网站上有MVC和API应用程序,并且都启用了NTLM/协商提供程序的Windows身份验证 我在web.config中有forwardWindowsAuthToken=true 我可以直接从Postman/Web浏览器调用API URL并接收JSON结果 所有API调用都是在具有UseDefaultCre

我正在.NETCore1.1上开发一个web应用程序,既有web API,也有MVC应用程序。当应用程序托管在IIS上时,我尝试从应用程序内部调用Web API时遇到了一个问题

我在同一个IIS网站上有MVC和API应用程序,并且都启用了NTLM/协商提供程序的Windows身份验证

我在web.config中有forwardWindowsAuthToken=true

我可以直接从Postman/Web浏览器调用API URL并接收JSON结果

所有API调用都是在具有UseDefaultCredentials=true的HttpClientHandler构造函数的HttpClient中进行的

如果我在我的桌面上运行MVC应用程序,即通过visual studio w/调试,并将其指向IIS网站上的Web API,我将得到正确的JSON结果,并且没有401错误

将MVC应用程序上的宿主URL更改为localhost而不是完全限定的URL对该问题没有影响

我认为这与ASP.NETCore没有从我的MVC应用程序向Web API转发正确的凭据有关。我花了几个小时试图找到完全处于相同情况的人,但大多数解决方案和问题都有略微不同的变化,为这些人提出的解决方案对我来说毫无帮助

有没有人能解释一下这个问题,或者指出我做得不对?下面是一个API调用示例,我将为基本索引页进行调用

    public async Task<IncidentWrapper> GetIndex(int limit, int offset)
    {
        using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }))
        {
            var response = await client.GetStringAsync("https://<some.server.name>/<appname>/api/v1/Incidents?limit=10&offset=0");
            return JsonConvert.DeserializeObject<IncidentWrapper>(response);
        }
    }

我花了太长时间才弄明白。如果您陷入这样一种情况,即您必须从MVC应用程序中调用intranet上的Web API,而它们位于同一个站点上,例如,您遇到401个错误,这是因为Microsoft在同一服务器上内置了回调循环检测。我通过在Microsoft知识库中使用第一种方法解决了问题