Tôi đang cố gắng thực hiện cuộc gọi HTTP GET từ ứng dụng giao diện điều khiển .NET Core 2.0. Điểm cuối mong đợi Windows Authentication.HttpClient, UseDefaultCredentials, Xác thực Windows, ứng dụng giao diện .NET Core 2.0 nhận 401 Unauthorized
Chương trình thử nghiệm của tôi thành công cho mục tiêu khung net45
. Ngược lại, việc xây dựng netcoreapp2.0
nhận được 401 trái phép.
Đây là phương pháp của tôi:
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);
}
Đây là tập tin dự án của tôi.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net45;netcoreapp2.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' != 'netcoreapp2.0'">
<PackageReference Include="System.Net.Http" Version="4.3" />
</ItemGroup>
</Project>
Chạy .\bin\Debug\net45\HttpClientTest.exe
trả về kết quả JSON mong đợi.
Chạy dotnet .\bin\Debug\netcoreapp2.0\HttpClientTest.dll
nhận 401 không được ủy quyền.
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>d__27.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at HttpClientTest.Program.<Get>d__1.MoveNext() in C:\temp\HttpClientTest\Program.cs:line 24
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at HttpClientTest.Program.Main(String[] args) in C:\temp\HttpClientTest\Program.cs:line 16
Làm cách nào để khắc phục sự cố này?
Tôi cũng đã thử các biến thể dưới đây, mà không cần bất kỳ sự thay đổi về sản lượng:
handler.Credentials = CredentialCache.DefaultNetworkCredentials;
handler.Credentials = CredentialCache.DefaultCredentials;
handler.Credentials = new NetworkCredential(username, password, domain);