我正在像这样的aspcore主机上托管一个blazor-wasm应用程序
public void Configure(IApplicationBuilder app)
{
// ...
app.UseBlazorFrameworkFiles();
// ...
}
现在我想用docker部署我的应用程序。我想从一个环境变量中控制blazor应用程序后端的地址。
因此,我在我的blazor项目中设置了wwwroot/appsettings.json
,它的工作与预期的一样。值在运行时读取。但是它们不会被宿主环境变量所覆盖。
有没有一种方法可以直接传递一个值?我可以读取主机中的环境变量,然后以其他方式将其传递下去。但是客户端需要从appsettings.json
资源中读取它。
我可能可以在不使用appsettings.json
文件的情况下执行此操作,并创建一个返回字符串的自定义端点。但我不喜欢这种做法。
您可以在Server项目中创建一个新的Razor页面,而不是设置index.html文件的回退路径。在此页面中,您将呈现客户端项目的应用程序组件。这个博客非常详细地解释了这个过程。如果您选择是否预呈现,过程是相同的。https://andrewlock.net/enabling-prerendering-for-blazor-webassembly-apps/.如果您不同意预渲染Blazor WebAssembly应用程序,您可以将渲染模式设置为WebAssembly。
<component type="typeof({NameOfClientProject}.App)" render-mode="WebAssembly" />
然后,您需要在子项目的应用程序剃刀组件中定义一个参数。
[Parameter]
public Hashtable EnvironmentInfo { get; set; }
然后,我们将上一个片段_Host.cshtml页面扩展到以下内容,以便传递EnvironmentVariables:
<component param-EnvironmnentInfo='@Environment.GetEnvironmentVariables()' type="typeof(BlazorWAEnvironment.Client.App)" render-mode="WebAssembly" />