.NET Core 2.1 Web API Impersonation 在处理错误时导致

我正在尝试在 .NET Core 2.1 Web-API 中进行模拟。所以这个 Web-API 使用 HttpClient 调用另一个 Web-API,我需要调用第一个的用户也是执行第二个的用户。同样的场景在另一个运行完整框架的 Web-API 中也可以使用这个调用:


((WindowsIdentity)_httpContextAccessor.HttpContext.User.Identity).Impersonate()

由于Impersonate()在 .NET Core 2.1 中不可用,我搜索了一些示例WindowsIdentity.RunImpersonated并尝试了与此类似的不同版本的代码:


WindowsIdentity identity = (WindowsIdentity)m_contextAccessor.HttpContext.User.Identity;

HttpClient client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true });


await WindowsIdentity.RunImpersonated(identity.AccessToken, async () =>

{

    var request = new HttpRequestMessage(HttpMethod.Get, url);

    var response = await client.SendAsync(request);

});

这会引发错误,client.SendAsync错误消息是这样的:


在此调用仍在处理时调用了 WSALookupServiceEnd。调用已取消 ---> System.Net.Http.HttpRequestException


堆栈跟踪的开始:


在 System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancelationToken) --- 内部异常堆栈跟踪结束 --- 在 System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken)取消令牌) 在 System.Threading.Tasks.ValueTask`1.get_Result() 在 System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage 请求,CancellationToken 取消令牌)


有没有其他人看到过这个错误或对如何解决这个问题有任何见解?我尝试了不同版本的代码来RunImpersonated与HttpContext用户进行调用,但都导致了相同的错误。


感谢您提供任何意见


白衣非少年
浏览 251回答 3
3回答

元芳怎么了

从 .NET Core 2.1 开始,SocketsHttpHandler 类提供了更高级别的 HTTP 网络类(如 HttpClient)使用的实现。尝试禁用此功能并查看异常是否消失。

森栏

尽管这个错误非常模糊,但我很确定这个问题与服务器拒绝连接到端点有关,或者它找不到端点。我的问题是网络服务器看不到端点 - 仅供参考,不要使用“localhost:xxxx”指向本地端口。相反,请在您的配置中使用服务器的完整 IP 地址。localhost 并不总是在本地 DNS 中解析。

青春有我

await WindowsIdentity.RunImpersonated(identity.AccessToken, async () =>{    //this should give you the impersonated user    var impersonatedUser = WindowsIdentity.GetCurrent().Name;    var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true });    var request = new HttpRequestMessage(HttpMethod.Get, url);    var response = await client.SendAsync(request);});
打开App,查看更多内容
随时随地看视频慕课网APP