c# - 在 Blazor 服务器端使用 HttpClient 获取 StatusCode 407 AuthenticationRequired
问题描述
我正在尝试从 blazor 服务器端项目访问 WebApi,并配置了如下所示的 HttpClient,但我总是得到:
{StatusCode: 407, ReasonPhrase: 'authenticationrequired', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:{ Date: Thu, 24 Oct 2019 11:01:00 GMT Cache-Control: no-cache X-Frame-Options: deny Proxy-Connection: Keep-Alive Proxy-Authenticate: NTLM Content-Type: text/html Content-Length: 3851}}
services.AddHttpClient<IUsersService, HttpUsersService>(options =>
{
options.BaseAddress = new Uri("https://api.example.com/");
options.DefaultRequestHeaders.Accept.Clear();
options.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
})
.ConfigureHttpMessageHandlerBuilder(h =>
new HttpClientHandler
{
DefaultProxyCredentials = CredentialCache.DefaultCredentials,
});
private async Task<User> GetUser()
{
var response = await _httpClient.GetAsync("v1/Users");
var test = await response.Content.ReadAsStreamAsync();
var model = await JsonSerializer.DeserializeAsync<User[]>(test);
return model.First();
}
有没有办法获取系统的代理和凭据或我在这里做错了什么?
解决方案
您在哪里应用此代码:
services.AddHttpClient<IUsersService, HttpUsersService>(options =>
{
options.BaseAddress = new Uri("https://api.example.com/");
options.DefaultRequestHeaders.Accept.Clear();
options.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
})
.ConfigureHttpMessageHandlerBuilder(h =>
new HttpClientHandler
{
DefaultProxyCredentials = CredentialCache.DefaultCredentials,
});
我猜是在 Startup 课上,对吧?
好的,由于您在上面提到您正在从 Blazor 客户端应用程序调用 Web Api 端点,因此不应使用此代码。我猜,这段代码从 IHttpClientFactory 创建了一个 HttpClient 服务。这与 Blazor 客户端应用程序中使用的 HttpClient 服务无关,该服务基于 JavaScript Fetch API。
但是,Blazor 框架默认将 HttpClient 服务添加到 DI 容器中,为了使用它,您只需将其注入到您的组件或类服务中......
样本:
@page "/"
@inject HttpClient Http
// more code...
@code {
User[] users;
// more code...
private async Task<User> GetUser()
{
users = await Http.GetJsonAsync<User[]>("v1/Users");
return model.First();
}
}
希望这可以帮助...
推荐阅读
- discord.js - 我无法通过discord js获取作者的头像
- ruby-on-rails - 如何从支架管理员的下拉列表中获取先前选择的值
- python-3.x - pandas long (very long + index) 到宽格式转换
- asp.net - How to convert the Absolute Uri path from .net to .net core?
- bash - 如何在 bash 命令的同一行中打印结果数据?
- powershell - PowerShell + Exchange Online - 使用 Where-Object 针对不同对象过滤一个对象?
- php - 查询生成器 update() codeigniter 4 没有更新我的密码
- android - Android Profiler:始终显示“此导入的跟踪没有可用的 cpu 使用数据”
- azure-active-directory - 如何使用图形 API 从 Azure AD B2C 读取用户名(DisplayUserPrincipalName)?
- javascript - 如何隐藏溢出内容?