我正在构建一个简单的 AspNetCore Balzor 服务器应用程序,它调用 AspNetCore Web Api 的端点。两者都托管在 Windows 服务器上的 IIS 中。
当我通过 IIS Express 在本地运行网站(指向托管 api)时,一切都按预期运行。如果我启动托管网站,我会收到“HHTP 错误 401.2 - 未经授权”。
这让我相信这是一个双跳问题,但我真的不知道如何解决它。
有人能指出我正确的方向吗?
这是设定
这些是我做过的基本测试
var cache = new CredentialCache(); cache.Add(url,"Negotiate",new NewtworkCredential("username","password"); var handler = new HttpClientHandler() {Credentials = cache, PreAuthenticate = true}; var httpClient = new HttpClient(handler) {Timeout = new TimeSpan(0,0,10)}; var response = await httpClient.GetAsync(url);
我使用 vs2022 中的模板创建了一个 Web api 并选择 windows auth 作为身份验证类型。并在 .net 7 中创建了另一个 blazor 服务器应用程序,在创建时也选择了 Windows Auth。
我在 blazor 服务器应用程序中有以下代码来调用 API,该 API 在本地端和发布到 IIS 中都运行良好。唯一的区别是在 IIS 中我需要启用 Windows 身份验证并禁用允许匿名。
@inject IHttpClientFactory ClientFactory
<div>@res</div>
@code {
private string res;
protected override async Task OnInitializedAsync()
{
forecasts = await ForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now));
var request = new HttpRequestMessage(HttpMethod.Get,
// "https://localhost:7244/WeatherForecast");
"http://localhost:8098/WeatherForecast");
// var client = ClientFactory.CreateClient();
var httpClient = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true });
var response = await httpClient.SendAsync(request);
if (response.IsSuccessStatusCode)
{
res = await response.Content.ReadAsStringAsync();
}
}
}