azure - Azure CORS 变量允许的来源
问题描述
每当在 Azure DevOps 中运行新的发布管道时,URL 都会更改。目前我的 ARM 模板有一个硬编码的 URL,如果继续手动添加可能会很烦人。
"cors": {
"allowedOrigins": [
"[concat('https://',parameters('storage_account_name'),'.z10.web.core.windows.net')]"
}
唯一改变的是10
部分,z10
所以本质上我希望它像
[concat('https://',parameters('storage_account_name'),'.z', '*', '.web.core.windows.net')]
我不知道这样的东西是否有效但本质上是这样的,以便 cors 策略将接受 URL,而不管 z 数如何。
解决方案
基本上说这是不可能的,因为 CORS 标准(参见文档)。它只允许精确的来源、通配符或空值。
例如,用于 Azure 存储的 ARM 也遵循此模式,允许您放置确切来源列表或通配符(请参阅 ARM 文档)
但是,如果您知道您的网站名称,则可以在您的 ARM 中接收完整的主机并在您的 CORS 中使用它:
"[reference(resourceId('Microsoft.Web/sites', parameters('SiteName')), '2018-02-01').defaultHostName]"
如果您知道存储帐户名称,则与静态网站(我猜是您的情况)相同:
"[reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2019-06-01', 'Full').properties.primaryEndpoints.web]"
高级参考输出操作
回答评论 - 如果您想替换reference
函数输出中的某些字符,最简单的方法是使用内置替换函数(请参阅文档)
如果您需要更高级的场景,我将通过引入一个自定义函数来粘贴我的解决方案,该函数正在删除https://
并/
从最后https://contonso.com/
转换为contonso.com
:
"functions": [
{
"namespace": "lmc",
"members": {
"replaceUri": {
"parameters": [
{
"name": "uriString",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[replace(replace(parameters('uriString'), 'https://',''), '/','')]"
}
}
}
}
],
# ...(some code)...
"resources": [
# ... (some resource)...:
"properties": {
"hostName": "[lmc.replaceUri(reference(variables('storageNameCdn')).primaryEndpoints.blob)]"
}
]
推荐阅读
- angular - 将内部 url 转换为类似于 routerlink 的行为
- google-app-maker - 数据源分页问题
- powershell - InputObject 为空 - Powershell DataTable
- node.js - 使用 Sequelize 通过 SSL 连接到 CloudSQL
- automated-tests - 如何在每个开发人员构建上自动运行我的所有测试用例?
- html - 如何使用 flexbox 和媒体查询进行包装?
- java - 修复自定义 OpenNLP NER 模型
- php - 如何使用带有 API 平台的应用程序 Symfony 4 在不同数据库之间切换?
- google-apps-script - 如何获得重复的序列号?
- ios - iOS 接收 Firebase 通知的“数据”而不是“通知”部分