我正在尝试在 .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用户进行调用,但都导致了相同的错误。感谢您提供任何意见
3 回答
森栏
TA贡献1810条经验 获得超5个赞
尽管这个错误非常模糊,但我很确定这个问题与服务器拒绝连接到端点有关,或者它找不到端点。我的问题是网络服务器看不到端点 - 仅供参考,不要使用“localhost:xxxx”指向本地端口。相反,请在您的配置中使用服务器的完整 IP 地址。localhost 并不总是在本地 DNS 中解析。
青春有我
TA贡献1784条经验 获得超8个赞
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);
});
- 3 回答
- 0 关注
- 250 浏览
添加回答
举报
0/150
提交
取消