设置 Blazor Webassembly 环境的正确方法是什么?

时间:2021-05-30 12:17:52

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

我的目标是能够从配置文件中更改环境名称。如果服务器配置为X,那么客户端也应该使用X环境。

您知道,在 ASP.NET 中,我们可以使用 launchSettings.json 将 IIS 服务器配置为开发,以及发布到生产的“真实”服务器。 WASM 客户端应该看到相同的配置。我想只在这里配置环境,减少发布服务器时忘记东西的重生。

有多篇文章描述了 Blazor 环境,但我对正确设置它感到困惑。

为了让客户端看到环境,我在 Client/Program.cs 文件中添加了这一行:

Console.WriteLine("Using environment " + builder.HostEnvironment.Environment);

经验:

  • 如果我将 Server/launchSettings.json/profiles/IIS Express/environmentVariables/ASPNETCORE_ENVIRONMENT 从 Development 更改为 Production,该网站将无法加载(返回 404)。

  • 在其他一些情况下,ASPNETCORE_ENVIRONMENT 只是被客户端忽略/无法访问。

  • <块引用>

    在本地运行应用程序时,环境默认为开发。应用发布后,环境默认为生产环境。

    有时对我来说确实如此,但并非总是如此。某些情况下,即使我在本地运行,环境也是生产环境。

  • this article 中描述的
  • Blazor.start({ environment: "Staging" }); 无效。这也需要一个字符串,我怎么能传递服务器端配置变量的值?

  • 使用 web.config,我总是可以覆盖环境名称。有两个问题:

    1. 为什么要维护另一个配置文件?已经有launchSettings.json,服务器将依赖于该文件。据我所知,我无法从 web.config 文件中引用其他设置。
    2. 它实际上不是控制环境名称的 blazor-environment 标头。为什么?
      • 删除 web.config

      • 在 Server/Startup.cs 中,添加:

        app.Use(async (context, next) =>
        {
            context.Response.Headers.Add("blazor-environment", env.EnvironmentName);
            await next.Invoke();
        });
        
      • 在 Chrome DevTools 中,我可以看到 header 的值确实是 Development。但客户打印生产。

      • 如果标题被忽略,我为什么要在 web.config 中设置它?它已设置,但是clinet WASM 项目不读取标题,它怎么知道名称?引用的 Blazor WASM JavaScript 文件是不是变了,环境名编译成那个了?

  • 还有生成的Client/launchSettings.json,好像完全忽略了。

  • 至少描述了 10 种获取环境名称的方法。有些使用appsettings.json(单独下载,或IWebAssemblyHostEnvironment,或IConfiguration,或Razor组件等。我只想读取C#代码部分中的全局环境名称。

我想这种混乱是因为 Blazor 近年来发生了变化。我有点失落。我应该使用哪一种?哪个应该总是有效?我可以摆脱同时更改 web.config 和 launchSettings.json 的需要吗?

0 个答案:

没有答案