通过 Office Scripts Fetch 调用 API 时出现 CORS 问题
CORS issue when calling API via Office Scripts Fetch
我正在尝试通过 Office 脚本(获取)对我创建的基于公开可用的 Azure 函数的 API 进行 API 调用。根据政策,我们需要为 Azure Functions 启用 CORS。我已经尝试了我能想到的每个域,但除非我允许所有来源,否则我无法接到电话工作。我试过:
- https://ourcompanydoamin.sharepoint.com
- https://usc-excel.officeapps.live.com
- https://browser.pipe.aria.microsoft.com
- https://browser.events.data.microsoft.com
第一个是我试图从中执行的 Excel 在线域,其余的是在 Chrome 的网络选项卡中的脚本 运行 期间出现的。 office Scripts 中的错误消息并没有像 Chrome 的控制台那样告诉我请求来自哪个域。我需要什么主机才能允许 Office 脚本调用我的 API?
预期的 CORS 设置是:https://*.officescripts.microsoftusercontent.com
。
但是,Azure Functions CORS 目前不支持通配子域。如果您尝试使用通配符子域设置来源,您将收到以下错误:
一种可能的解决方法是在您的 Azure Functions 代码中明确维护一个“允许列表”。这是一个概念验证实现(假设您对 Azure Functions 使用 node.js):
module.exports = async function (context, req) {
// List your allowed hosts here. Escape special characters for the regular expressions.
const allowedHosts = [
/https\:\/\/www\.myserver\.com/,
/https\:\/\/[^\.]+\.officescripts\.microsoftusercontent\.com/
];
if (!allowedHosts.some(host => host.test(req.headers.origin))) {
context.res = {
status: 403, /* Forbidden */
body: "Not allowed!"
};
return;
}
// Handle the normal request and generate the expected response.
context.res = {
status: 200,
body: "Allowed!"
};
}
请注意:
- 需要正则表达式来匹配动态子域。
- 为了在代码中进行来源检查,您需要在 Functions CORS 设置页面上将
*
设置为 Allowed Origins
。
或者如果您想使用 ASP.NET Core 构建服务,您可以这样做:.
我正在尝试通过 Office 脚本(获取)对我创建的基于公开可用的 Azure 函数的 API 进行 API 调用。根据政策,我们需要为 Azure Functions 启用 CORS。我已经尝试了我能想到的每个域,但除非我允许所有来源,否则我无法接到电话工作。我试过:
- https://ourcompanydoamin.sharepoint.com
- https://usc-excel.officeapps.live.com
- https://browser.pipe.aria.microsoft.com
- https://browser.events.data.microsoft.com
第一个是我试图从中执行的 Excel 在线域,其余的是在 Chrome 的网络选项卡中的脚本 运行 期间出现的。 office Scripts 中的错误消息并没有像 Chrome 的控制台那样告诉我请求来自哪个域。我需要什么主机才能允许 Office 脚本调用我的 API?
预期的 CORS 设置是:https://*.officescripts.microsoftusercontent.com
。
但是,Azure Functions CORS 目前不支持通配子域。如果您尝试使用通配符子域设置来源,您将收到以下错误:
一种可能的解决方法是在您的 Azure Functions 代码中明确维护一个“允许列表”。这是一个概念验证实现(假设您对 Azure Functions 使用 node.js):
module.exports = async function (context, req) {
// List your allowed hosts here. Escape special characters for the regular expressions.
const allowedHosts = [
/https\:\/\/www\.myserver\.com/,
/https\:\/\/[^\.]+\.officescripts\.microsoftusercontent\.com/
];
if (!allowedHosts.some(host => host.test(req.headers.origin))) {
context.res = {
status: 403, /* Forbidden */
body: "Not allowed!"
};
return;
}
// Handle the normal request and generate the expected response.
context.res = {
status: 200,
body: "Allowed!"
};
}
请注意:
- 需要正则表达式来匹配动态子域。
- 为了在代码中进行来源检查,您需要在 Functions CORS 设置页面上将
*
设置为Allowed Origins
。
或者如果您想使用 ASP.NET Core 构建服务,您可以这样做: