【发布时间】:2022-01-08 10:27:00
【问题描述】:
我们正在构建一个 Vue SPA 并使用 Axios 进行 API 调用。我们尝试扩展当前方法以将自定义事件发布到 Azure 事件网格,但出现以下错误:
从源“https://loving-chandrasekhar-bfd4c4”访问“https://egtester.uksouth-1.eventgrid.azure.net/api/events?api-version=2018-01-01”的 XMLHttpRequest .netlify.app' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
我担心 Event Grid 的服务器端配置使其与基于浏览器的远程调用(例如通过 axios)不兼容。
我们创建了一个 MRE:
- Github
- Netlify Live demo
- 事件网格的 ARM 和 JS 是 Q 的底部
我们已经检查/验证的一些事情:
- Docs on publishing custom events 概述请求的 URL 和所需的标头
- 代码在 localhost 或 netlify 上不起作用
- 我们已通过运行 Postman 查询确认端点正常
- 事件网格设置为无限制地允许来自公共 IP 的流量
有谁知道如何配置 axios 请求才能工作? axios 是在这种情况下使用的合适的 JS 库吗?
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"topics_egtester_name": {
"defaultValue": "egtester",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.EventGrid/topics",
"apiVersion": "2021-06-01-preview",
"name": "[parameters('topics_egtester_name')]",
"location": "uksouth",
"sku": {
"name": "Basic"
},
"kind": "Azure",
"identity": {
"type": "None"
},
"properties": {
"inputSchema": "EventGridSchema",
"publicNetworkAccess": "Enabled",
"disableLocalAuth": false
}
}
]
}
const eventGridKey = "3SErw+mCGtyvTWcVsa1lqd4iJiFW2IsUNmothj75J1A=";
const apiEndpoint = "https://egtester.uksouth-1.eventgrid.azure.net/api";
const eventGridApi = axios.create({
baseURL: apiEndpoint,
params: {
"api-version": "2018-01-01"
},
headers: {
"Content-Type": "application/json;charset=UTF-8",
"aeg-sas-key": eventGridKey,
},
});
function onSubmit() {
let postData = {
id: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
eventType: "recordInserted",
subject: "egtester/submission",
eventTime: "2021-11-29T16:18:38.532Z",
data: {
preferredName: "Nikhil",
familyName: "Kanukuntla",
accepted: true,
message: "Test Message",
email: "nikhil.kanukuntla@nhq.com",
},
};
eventGridApi
.post("/events", postData)
.then((result) => {
console.log(JSON.stringify(result));
})
.catch((err) => {
console.log(err);
});
}
【问题讨论】:
标签: javascript axios azure-eventgrid