Я пытаюсь сделать HTTP-вызов GET из консольного приложения .NET Core 3.0. Конечная точка ожидает аутентификацию Windows. Конечной точкой является рабочая служба веб-API.NET Framework 4.5.2 в IIS, успешно используемая несколькими клиентскими приложениями.
Моя тестовая программа успешно выполнена для целевой платформы net45
. Напротив, сборка netcoreapp3.0
получает 401 Несанкционированный.
Вот мой метод:
using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
static async Task<string> Get(string serverUri, string requestUri)
{
var handler = new HttpClientHandler() { UseDefaultCredentials = true };
var client = new HttpClient(handler) { BaseAddress = new Uri(serverUri) };
return await client.GetStringAsync(requestUri);
}
Вот мой файл проекта.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net45;netcoreapp3.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net45'">
<PackageReference Include="System.Net.Http" Version="4.3" />
</ItemGroup>
</Project>
Запуск .\bin\Debug\net45\HttpClientTest.exe
возвращает ожидаемый результат JSON.
Запуск dotnet .\bin\Debug\netcoreapp3.0\HttpClientTest.dll
получает 401 Несанкционированный.
Unhandled exception. System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 401 (Unauthorized).)
---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at System.Net.Http.HttpClient.GetStringAsyncCore(Task'1 getTask)
at ConsoleApp1.Program.Get(String serverUri, String requestUri) in C:\temp\coreapp3\Program.cs:line 16
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task'1.GetResultCore(Boolean waitCompletionNotification)
at System.Threading.Tasks.Task'1.get_Result()
at ConsoleApp1.Program.Main(String[] args) in C:\temp\coreapp3\Program.cs:line 22
Как мне это исправить?
Я также попробовал варианты ниже, без каких-либо изменений в выводе:
handler.Credentials = CredentialCache.DefaultNetworkCredentials;
handler.Credentials = CredentialCache.DefaultCredentials;
handler.Credentials = new NetworkCredential(username, password, domain);