У меня есть приложение .NET Core 3.1 Api со следующей конфигурацией HttpClient. В Startup.cs
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddHttpClient("myapi", c =>
{
c.BaseAddress = new Uri(Configuration["endpoint"]);
c.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
IISDefaults.AuthenticationScheme, Convert.ToBase64String(
System.Text.Encoding.UTF8.GetBytes($"{Configuration["username"]}:{Configuration["password"]}")));
});
Затем я пытаюсь сделать HTTP-вызов следующим образом:
var client = clientFactory.CreateClient(clientName);
HttpResponseMessage response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
return await response.Content.ReadAsStringAsync();
однако я всегда получаю неавторизованный ответ при вызове внутреннего API. В разделе «Отладка» у меня включена аутентификация Windows и анонимная аутентификация. С Postman мои вызовы API проходят, что подтверждает, что я получил правильные учетные данные. Можете ли вы предложить какие-либо изменения, чтобы заставить эту работу работать?
Вместо c.DefaultRequestHeaders.Authorization =
у меня такой конфиг
c.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
{
Credentials = new NetworkCredential("username", "password"),
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
PreAuthenticate = true
});
Я предполагаю, что это не будет работать как есть в вашем случае, но я надеюсь, что это поможет вам встать на правильный путь.