如何在AWS S3 / CDN中托管具有环境特定值的Blazor Webassembly

时间:2020-10-26 19:49:23

标签: amazon-s3 blazor blazor-client-side blazor-webassembly

我已经搜索了所有正式文档,但找不到有关如何在S3 / CDN中以特定于环境的值托管Blazor Webassembly的任何信息。

您可以想象该应用程序将在3个不同的环境中进行开发,测试和生产。每个环境都有其自己的特定于环境的值。例如api网址,客户端ID,api密钥。

如果我在IIS中托管Blazor Webassembly应用程序,则可以将特定于环境的值放在appSetting。{environment} .json中,然后可以在web.config中设置“ ASPNETCORE_ENVIRONMENT”的值以指定应用程序的环境

但是我们如何在S3和CDN中做到这一点?

2 个答案:

答案 0 :(得分:0)

如果有办法在请求中指定自定义标头,您可以通过发送带有您期望的环境名称的“blazor-environment”标头来告诉 blazor wasm 它正在运行的环境。这篇文章讲解了blazor-environment的使用:

https://docs.microsoft.com/en-gb/aspnet/core/blazor/fundamentals/environments?view=aspnetcore-3.1

不确定如何在 S3 中设置自定义标头...也许您需要将 Cloud Front 与 S3 结合使用才能实现这一点,抱歉我无法完全回答问题。

答案 1 :(得分:0)

我们遇到了同样的问题,我们使用 CloudFront 和他们的“新”CloudFront Functions 解决了这个问题。 CloudFront 分发源来自 S3。

这基于使用此处记录的响应标头方法:https://docs.microsoft.com/en-us/aspnet/core/blazor/fundamentals/environments?view=aspnetcore-5.0#set-the-environment-via-header

我创建了以下函数,然后使用 Viewer Response 事件将其应用于 CloudFront 分配:

function handler(event) {
  var response = event.response;
  var headers = response.headers;

  headers['blazor-environment'] = { value: 'Staging' };

  return response;
}

在我们的例子中,我们为每个环境使用不同的 AWS 账户,所以我们只需在每个环境中以相同的名称创建相同的函数,然后只需将“QA”更改为我们想要的任何环境。您还可以轻松地为各种环境创建多个函数,只需将适当的一个应用到每个 CloudFront 分配。