我搜索了所有的官方文档,找不到关于如何在S3/CDN中托管具有特定环境值的Blazor Webassembly的任何信息。
你可以想象,该应用程序将有3个不同的环境开发,测试,生产。每个环境都有自己的特定于环境的值。例如api url、客户端id、api密钥。
如果我在IIS中托管Blazor Webassembly应用程序,我可以在appSetting中放入特定于环境的值。{environment}.json,然后我可以设置";ASPNETCORE_环境";在web.config中指定应用程序的环境。
但我们如何在S3和CDN中做到这一点?
如果有一种方法可以在请求中指定自定义标头,那么您可以通过发送一个"blazor环境";标头,其中包含所需环境的名称。这篇文章解释了blazor环境的使用:
https://learn.microsoft.com/en-gb/aspnet/core/blazor/fundamentals/environments?view=aspnetcore-3.1
不知道如何在S3中设置自定义标头。。。也许你需要将Cloud Front与S3结合使用才能实现这一点,很抱歉我无法完全回答这个问题。
我们遇到了同样的问题,我们使用CloudFront和他们的"新的";CloudFront函数。CloudFront分发源于S3。
这是基于使用此处记录的响应标头方法实现的:https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/environments?view=aspnetcore-5.0#通过标头设置环境
我创建了以下函数,然后使用Viewer Response事件将其应用于CloudFront分发版:
function handler(event) {
var response = event.response;
var headers = response.headers;
headers['blazor-environment'] = { value: 'Staging' };
return response;
}
在我们的案例中,我们为每个环境使用不同的AWS帐户,因此我们只需在每个环境中以相同的名称创建相同的函数,然后将"QA"更改为我们想要的任何环境。您还可以轻松地为各种环境创建多个函数,只需将适当的函数应用于每个CloudFront分发即可。