将不同的appsettings.json加载到Blazor WebAssembly中的Window对象中

时间:2020-07-28 06:24:45

标签: javascript c# asp.net-core blazor webassembly

我目前正在开发.NET Standard 2.1 Blazor WebAssembly应用程序。我尝试加载不同的应用程序设置。{Environment} .json配置到我的Window名称空间(JavaScript)。

因此,我关注这篇博客文章:

https://jkdev.me/blazor-appsettings/

到目前为止很好:我在wwwroot目录中添加了3个appsettings。*。json文件:

appsettings.json:

{
  "App": {
    "Message": "Hello World!"
  }
}

appsettings.Development.json:

{
  "App": {
    "Environment": "Development"
  }
}

appsettings.Staging.json:

{
  "App": {
    "Environment": "Staging"
  }
}

在program.cs主要方法中,我将建立新的配置设置,如下所示:

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

        ConfigureServices(builder.Services);

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

    private static void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton(
             provider =>
                 {
                     var config = provider.GetService<IConfiguration>();

                     return config.GetSection("App").Get<AppConfiguration>();
                 });

    }
}

public class AppConfiguration
{
    public string Environment { get; set; }
}

此外,我尝试根据设置的环境变量(在脚本中)加载正确的appsettings.json,因此,我需要像这样覆盖Blazor引导过程:

<script src="_framework/blazor.webassembly.js" autostart="false"></script>
<script>
    const environmentName = 'Staging';
    Blazor.start({
        loadBootResource: function(type, name, defaultUri, integrity) {
            // Adds a custom HTTP header to the outbound requests
            // To retain the default integrity checking behavior, it's necessary to pass through the 'integrity' parameter
            return fetch(defaultUri,
                {
                    cache: 'no-cache',
                    integrity: integrity,
                    headers: { 'blazor-environment': environmentName }
                });
        }
    });
</script>

不幸的是,此编码无法正常工作-我总是收到错误消息:

enter image description here

您知道如何正确覆盖JavaScript中的Blazor.start引导过程吗?

不幸的是,目前还没有太多的文档。

您知道如何在Blazor WASM中加载不同的appsettings。*。json配置吗?

1 个答案:

答案 0 :(得分:1)

应用设置是针对每个环境的。这意味着您需要通过设置 ASPNETCORE_ENVIRONMENT 环境变量或 blazor-environment 响应标头来设置服务器端的环境变量:https://docs.microsoft.com/en-us/aspnet/core/blazor/fundamentals/environments?view=aspnetcore-3.1

Blazor Wasm启动脚本将加载与 blazor-environment 相对应的 appsettings.json appsettings。{Environment} .json 文件。接收WebAssemblyHostBuilder.Configuration并在其文件中填充数据。

然后可以配置到组件,服务或js。
https://docs.microsoft.com/en-us/aspnet/core/blazor/fundamentals/configuration?view=aspnetcore-3.1