由于appsettings.json
在blazor WA上无法很好地工作,因此我创建了自己的文件并将.json
文件放在wwwroot
中,在需要该文件的页面中,我使用{ {1}}进入文件如下
HttpClient
这很好用,但是我要在多个页面中执行此操作,因此我想在startup.cs中注入config = await Http.GetJsonAsync<Configuration>("/config/appsettings.json");
对象/服务,并让我的页面使用它而不是多次执行。
我很难在Startup.cs中找到如何正确读取文件的方法,我们将不胜感激。
更新
似乎Configuration
在App.OnInitializedAsync
之前被解雇,但{{1}}花费的时间更长,这导致Index.OnInitializedAsync
在上述行之前执行。
这是所有代码
Startup.cs
Settings = await httpClient.GetJsonAsync<Settings>("/config/appsettings.json").ConfigureAwait(false);
App.razor
App.OnInitializedAsync
Index.razor
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ConfigurationManager>();
services.AddBlazoredToast();
}
public void Configure(IComponentsApplicationBuilder app)
{
app.AddComponent<App>("app");
}
}
这是序列
protected override async Task OnInitializedAsync()
{
Console.WriteLine("App.OnInitializedAsync");
await configManager.InitializeAsync();
}
答案 0 :(得分:1)
恕我直言,最好的方法是注册一个单身Task
public void ConfigureServices(IServiceCollection services)
{
services
.AddSingleton(async p =>
{
var httpClient = p.GetRequiredService<HttpClient>();
Console.WriteLine("Get settings called");
return await httpClient.GetJsonAsync<Settings>("settings.json")
.ConfigureAwait(false);
});
}
然后在需要设置的地方异步调用。在样本页面中
@inject Task<Settings> _getSettings
...
@code {
protected override async Task OnInitializedAsync()
{
var settings = await _getSettings;
Console.WriteLine("Settings received in main {0}", settings?.ApiBaseUrl);
}
}
这样,只需调用一次 settings.json