【发布时间】:2020-11-09 13:30:14
【问题描述】:
我正在使用 .NET Core 3.1 这是我正在使用的代码:
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new Uri(URL), "NEGOTIATE", new NetworkCredential(USER, PASSWORD, DOMAIN));
using (HttpClientHandler handler = new HttpClientHandler())
{
handler.Credentials = credentialCache;
using (HttpClient httpClient = new HttpClient(handler))
{
HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("GET"), REQUEST_URL);
HttpResponseMessage response = httpClient.SendAsync(request).Result;
Console.Write(response.ToString());
}
}
它在我的 windows 机器上工作正常,但在 linux docker 容器上启动时崩溃:
System.AggregateException:发生一个或多个错误。 (GSSAPI 操作失败并出现错误 - 未指定的 GSS 失败。次要代码可能会提供更多信息(找不到领域“DOMAIN_NAME”的 KDC)。) ---> System.ComponentModel.Win32Exception (0x80090020): GSSAPI 操作失败并出现错误 - 未指定的 GSS 失败。次要代码可能会提供更多信息(找不到领域“DOMAIN_NAME”的 KDC)。 在 System.Net.Security.NegotiateStreamPal.AcquireCredentialsHandle(字符串包,布尔 isServer,NetworkCredential 凭证) 在 System.Net.NTAuthentication.Initialize(布尔 isServer,字符串包,NetworkCredential 凭据,字符串 spn,ContextFlagsPal 请求的ContextFlags,ChannelBinding 通道绑定) 在 System.Net.Http.AuthenticationHelper.SendWithNtAuthAsync(HttpRequestMessage 请求,Uri authUri,ICredentials 凭据,布尔 isProxyAuth,HttpConnection 连接,HttpConnectionPool 连接池,CancellationToken 取消令牌) 在 System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection 连接,HttpRequestMessage 请求,布尔 doRequestAuth,CancellationToken 取消令牌) 在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔 doRequestAuth,CancellationToken 取消令牌) 在 System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage 请求,Uri authUri,ICredentials 凭据,布尔 preAuthenticate,布尔 isProxyAuth,布尔 doRequestAuth,HttpConnectionPool 池,CancellationToken cancelToken) 在 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancelToken) 在 System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancelToken) 在 OurHomeServer.Log.LoggingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancelToken) 在 /src/OurHomeServer/Log/LoggingHandler.cs:line 35 在 System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
当我在容器的外壳中使用 curl 请求时它可以工作。
【问题讨论】:
标签: docker .net-core httpclient