【问题标题】:Is it possible to pass environment variables from the host to a hosted blazor wasm app?是否可以将环境变量从主机传递到托管的 blazor wasm 应用程序?
【发布时间】:2021-06-23 21:21:26
【问题描述】:

我正在从这样的 aspcore 主机托管一个 blazor wasm 应用程序

public void Configure(IApplicationBuilder app)
{
    // ...
    app.UseBlazorFrameworkFiles();
    // ...
}

现在我想用 docker 部署我的应用程序。我想从环境变量中控制 blazor 应用程序后端的地址。

所以我在我的 blazor 项目中设置了wwwroot/appsettings.json,它的工作方式与预期一样。在运行时读取值。但它们不会被主机环境变量覆盖。

有没有办法向下传递一个值?我可以读取主机中的环境变量并以其他方式传递它。但是客户端需要从appsettings.json资源中读取。

我可能可以不使用appsettings.json 文件并创建一个返回字符串的自定义端点。但我不喜欢这种方法。

【问题讨论】:

    标签: docker asp.net-core blazor blazor-webassembly


    【解决方案1】:

    您可以在服务器项目中创建一个新的 Razor 页面,而不是设置 index.html 文件的后备路径。在此页面中,您呈现客户端项目的 App 组件。 这个博客非常详细地解释了这个过程。如果您选择预渲染或不预渲染,过程是相同的。 https://andrewlock.net/enabling-prerendering-for-blazor-webassembly-apps/。如果您对预渲染 Blazor WebAssembly 应用程序不满意,您可以将渲染模式设置为 WebAssembly。

    <component type="typeof({NameOfClientProject}.App)" render-mode="WebAssembly" />
    

    然后您需要在子项目的 App razor 组件中定义一个参数。

    [Parameter]
    public Hashtable EnvironmentInfo { get; set; }
    

    然后我们将之前的 sn-p,_Host.cshtml 页面扩展到以下内容,以便我们传递 EnvironmentVariables:

    <component param-EnvironmnentInfo='@Environment.GetEnvironmentVariables()' type="typeof(BlazorWAEnvironment.Client.App)" render-mode="WebAssembly" />
    

    【讨论】:

    • 这对我不起作用。它只是呈现&lt;!--Blazor:{"type":"webassembly","assembly":"EzSurvey.Presentation.WebClient","typeName":"EzSurvey.Presentation.WebClient.App","parameterDefinitions":"W10=","parameterValues":"W10="}--&gt;
    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 2018-01-08
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2016-07-31
    • 1970-01-01
    相关资源
    最近更新 更多