Вот код Program.cs:
Код: Выделить всё
builder.Services.AddHttpClient("MyApiClient",
client => client.BaseAddress = new Uri("https://api.test.com"))
.AddHttpMessageHandler();
builder.Services.AddScoped(sp => sp.GetRequiredService()
.CreateClient("MyApiClient"));
Код: Выделить всё
public async Task GetUser()
{
// Set URL
var url = "/account/info";
var user = await GetAsync(url);
return user;
}
private async Task GetAsync(string url)
{
if (string.IsNullOrWhiteSpace(url))
return default;
using (var client = _httpClientFactory.CreateClient("MyApiClient"))
{
var result = await client.GetAsync(url);
if (!result.IsSuccessStatusCode)
throw new Exception("My API GET call failed. URL: " + url);
var json = await result.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize(json);
}
}
P.S. Я вижу, что HttpClient создан правильно, а BaseAddress верен в полученном сообщении об ошибке. Сообщение об ошибке представляет собой стандартную ошибку несанкционированного доступа. Я не вижу никаких дополнительных данных в сообщении об ошибке, кроме URL-адреса. определенно правильный.
Я также хочу упомянуть, что я обрабатываю управление идентификацией и токены доступа через Azure AD B2C. Эта настройка кажется правильной, поскольку пользователь может нормально войти в систему, и идентификатор пользователя также верен.
ОБНОВЛЕНИЕ:
Простая проверка HttpClient в методе GetAsync() показывает, что access_token НЕ прикрепляется к вызову - как вы можете видеть на следующем изображении, DefaultRequestHeaders имеет значение null. У него должна быть авторизация со значением Bearer {access_token_value – см. ниже.
На данный момент я почти уверен, что это проблема конфигурации. . Также обратите внимание, что «автономные» приложения Blazor WASM НЕ получают access_token автоматически, и для их включения в процесс входа необходимы дополнительные области. Я еще не выяснил, какая конфигурация правильная, и когда это сделаю, опубликую ее здесь.
[img]https://i .sstatic.net/82QfDEZT.png[/img]
Подробнее здесь: https://stackoverflow.com/questions/791 ... ess-tokens