HttpClient BaseAddress иногда имеет значение null в проекте BlazorC#

Место общения программистов C#
Ответить
Anonymous
 HttpClient BaseAddress иногда имеет значение null в проекте Blazor

Сообщение Anonymous »

В настоящее время я начал новый проект с использованием Blazor и использую режим автоматического рендеринга во всем мире. Структура по умолчанию имеет 2 проекта: серверный и клиентский проект. Я создал простую страницу входа в клиенте, которая использует HttpClient для вызова API с сервера для входа пользователя в систему. BaseAddress устанавливается как на сервере, так и на клиенте Program.cs:
Server Program.cs:

Код: Выделить всё

builder.Services.AddHttpClient("ServerHttpClient", client =>
{
client.BaseAddress = new Uri(builder.Configuration["MainDomain"]!);
});
Клиентская программа.cs:

Код: Выделить всё

var builder = WebAssemblyHostBuilder.CreateDefault(args);

Console.WriteLine($"The BaseAddress is: {builder.HostEnvironment.BaseAddress}");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

await builder.Build().RunAsync();
И как делается запрос:

Код: Выделить всё

public partial class Login : ComponentBase
{
[Inject]
public HttpClient HttpClient { get; set; } = default!;

async Task LogInAsync()
{
//...some code omitted for brevity
var response = await HttpClient.PostAsync("api/users/signin", content);
}
}
Проблема в том, что иногда HttpClient.BaseAddress имеет значение null, иногда оно заполнено. Когда я перезапускаю и запускаю приложение, иногда оно выдает ошибку с нулевым BaseAddress, иногда оно работает со значением BaseAddress.
Если вы заметили в client Program.cs, я добавил журнал для проверки BaseAddress. Когда ошибок не происходит, я вижу, что журнал появляется в консоли браузера. Но когда происходит ошибка, BaseAddress не только имеет значение null, но и журнал даже не появляется. Как будто он не прошел через эту строку кода. Даже если BaseAddress имеет значение null, я думал, что он должен был зарегистрировать хотя бы строку «The BaseAddress is:».
Что я делаю не так?
РЕДАКТИРОВАТЬ:
Хорошо, после еще одного тестирования выяснилось, что это проблема времени. Если я нажму кнопку входа в систему, как только она появится, кажется, что клиентский код еще не запущен (?), И поэтому журнал не появляется, а BaseAddress имеет значение null. Я думаю, это предварительно обработанная страница сервера (извините, если не так, я только начал читать)? Но если я подожду несколько секунд, он отобразит журнал и BaseAddress получит значение.
Если это действительно так, как мы обычно с этим справляемся?
РЕДАКТИРОВАТЬ 2:
Я не уверен, что это проблема со временем, поскольку я столкнулся со случаем, когда журнал не отображался полностью даже после ожидания. на несколько минут. Но после обновления журнал отображается.

Подробнее здесь: https://stackoverflow.com/questions/793 ... or-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»