我正在尝试在 .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用户进行调用,但都导致了相同的错误。
感谢您提供任何意见
元芳怎么了
森栏
青春有我
相关分类