Конфигурация веб-сборки Blazor (appsettings.json) Первоначальная загрузка нулевых значений в компоненте

Приложение Blazor WebAssembly загружает значения конфигурации после выполнения методов, приводящих к нулевому начальному значению, затем оно вернется с правильными значениями.

Я следил за документацией Microsoft .

Добавление файла:

wwwroot/appsettings.json

Мой Component.razor:

@page "/"

<h1>Configuration example</h1>

<p>Message: @Configuration["message"]</p>
@code {
   protected override async Task OnParametersSetAsync()
   {
      await trying to read Configuration["Message"];
    }
}

Мой файл Program.cs:

 public class Program
        {
        public static async Task Main(string[] args)
        {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("app");

        builder.Services.AddTransient(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

        await builder.Build().RunAsync();
    }
}

Моя _Imports.razor

@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.Extensions.Configuration
@using Microsoft.JSInterop
@inject IConfiguration Configuration;

Примечание: Поймите, что я получаю значение правильно, но сначала всегда null, а затем повторно визуализирую с правильными значениями, я использую OnParametersSetAsync () в качестве точки входа, я понимаю, что OnParametersSetAsync () изменяется при каждом изменении параметра. но значения конфигурации должны быть постоянными, а не нулевыми, верно?


person smj    schedule 26.07.2020    source источник
comment
Пожалуйста, предоставьте простое воспроизведение проблемы - желательно в репозитории GH или аналогичном. Вы также не сказали, где видите нуль. Из предоставленного вами кода будет только один рендеринг, поэтому, когда вы говорите, что он повторяет рендеринг, вы делаете что-то иное, чем показано здесь. Что именно это: await пытается прочитать Configuration [Message] ;?   -  person Mister Magoo    schedule 26.07.2020
comment
Некоторые из этих методов переопределения вызываются дважды, сначала проверьте значение null и посмотрите, вызывается ли он снова с правильными данными.   -  person Paw Baltzersen    schedule 26.07.2020
comment
@PawBaltzersen Ага, вот что происходит   -  person smj    schedule 17.08.2020
comment
@smj Насколько я знаю, это предполагаемое поведение. Это может быть изменено, но я не знаю. Нулевая проверка - ваш лучший вариант на данный момент.   -  person Paw Baltzersen    schedule 17.08.2020
comment
Это сработало для меня в новом проекте, я точно не уверен, но обновление пакетов nugat до последней версии сделало это.   -  person smj    schedule 25.08.2020


Ответы (3)


У меня была такая же проблема сегодня, когда я пытался получить значение строки подключения из appsettings.json. Попробуйте перезапустить Visual Studio, и все заработает правильно.

person Hamdan Dabbas    schedule 26.07.2020
comment
Приятель, это проблема времени выполнения Blazor WebAssembly, конфигурация работает Просто отлично, после того, как он сначала получит значение null, он будет повторно отображен с правильным значением - person smj; 26.07.2020

Компонент создается дважды, до и после загрузки данных. Это сделано для того, чтобы страница показывалась быстрее, а затем загружались данные.

Почему Blazor визуализирует компонент дважды

Почему методы жизненного цикла Blazor выполняются дважды?

Загрузка данных при загрузке компонентов

https://docs.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-3.1#stateful-reconnection-after-prerendering.

person Paw Baltzersen    schedule 02.10.2020

он работал после обновления до пакетов blazor nuget с 3.2.0 до 3.2.1

person smj    schedule 12.10.2020