【问题标题】:Load different appsettings.json into Window object in Blazor WebAssembly将不同的 appsettings.json 加载到 Blazor WebAssembly 中的 Window 对象中
【发布时间】:2020-11-17 13:02:11
【问题描述】:

我目前正在开发一个 .NET Standard 2.1 Blazor WebAssembly 应用程序。我尝试将不同的 appsettings.{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 Main 方法中,我构建了这样的新配置设置:

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>

不幸的是,这种编码不起作用 - 我总是收到错误:

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

很遗憾,目前还没有多少文档。

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

【问题讨论】:

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


    【解决方案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.jsonappsettings.{Environment}.json 文件接收并使用这些文件中的数据填充WebAssemblyHostBuilder.Configuration

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

    【讨论】:

    • 非常感谢来自 mars 的 @agua,我想我将 Blazor WASm ASP.Net 托管和 Blazor WASm 混为一谈......好吧,我实现了我想要的:从 program.cs Main 我通过了构建器。 HostEnvironment.IsDevelopment() 到 JS 配置对象并相应地加载正确的 appsettings.{env}.json 文件:)
    • 如果您在 IIS 或 Azure App Service 中托管,则 blazor-environment 和 ASPNETCORE_ENVIRONMENT 环境变量都可以正常工作,如果您的应用程序在 s3 或 cdn 中托管为静态应用程序,则无法正常工作。跨度>
    猜你喜欢
    • 2020-11-15
    • 2020-11-14
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2021-12-06
    • 2021-03-17
    • 2019-09-21
    • 2021-12-19
    相关资源
    最近更新 更多