#javascript #azure-functions #microsoft-teams
#javascript #azure-функции #microsoft-teams
Вопрос:
Я хочу создать вкладку Microsoft Teams в качестве веб-приложения. Я запустил и запустил начальную настройку. (Используя команды Yo) Теперь я хочу отправить http-запрос (ы) в функцию Azure. Поэтому я добавил функцию промежуточного программного обеспечения post в свой server.ts, которая должна вызывать эту функцию.
express.post("/createteamswiki", (req, res) => {
https.request("my.function.url", { method : "POST" }, () => {
});
res.status(200);
res.json("Oki");
});
В моем WikiConfig.ts я изменил метод сохранения для отправки запроса. Я попытался использовать vanilla-js и модули: http и https. С помощью vanilla-js запрос отправляется, но в Chrome dev tools он помечается как ERR_FAILED. Библиотеки вообще ничего не отправляют. Таким образом, обратный вызов успеха никогда не вызывается, и поэтому saveEvent.notifySuccess(); также не вызывается. Таким образом, окно конфигурации остается и сообщает об ошибке.
public async componentWillMount() {
this.updateTheme(this.getQueryVariable("theme"));
if (await this.inTeams()) {
microsoftTeams.initialize();
microsoftTeams.getContext((context: microsoftTeams.Context) => {
this.setState({
value: context.entityId
});
this.updateTheme(context.theme);
microsoftTeams.settings.setValidityState(true);
microsoftTeams.appInitialization.notifySuccess();
});
microsoftTeams.settings.registerOnSaveHandler((saveEvent: microsoftTeams.settings.SaveEvent) => {
// Calculate host dynamically to enable local debugging
const host = "https://" window.location.host;
microsoftTeams.settings.setSettings({
contentUrl: host "/sharepointWikiTab/?name={loginHint}amp;tenant={tid}amp;group={groupId}amp;theme={theme}",
websiteUrl: host "/sharepointWikiTab/?name={loginHint}amp;tenant={tid}amp;group={groupId}amp;theme={theme}",
suggestedDisplayName: "Sharepoint Wiki",
removeUrl: host "/sharepointWikiTab/remove.html?theme={theme}",
entityId: this.state.value
});
microsoftTeams.getContext((context: microsoftTeams.Context) => {
this.setState({
value: context.teamSiteUrl || ""
});
https.request("https://" window.location.host "/createteamswiki?code=gM6t7bov41tkw1ZTxGZUasY1WQH7UgrONp4OyoVzaYaFtFBTBwZcRQ==amp;team=" context.teamSiteUrl, (res) => {
this.setState({
value: "Awesome it works..."
});
saveEvent.notifySuccess();
});
});
// saveEvent.notifySuccess();
});
} else {
}
}
Я не могу найти никаких причин, по которым он ведет себя таким образом, поскольку запрос вызывает node.js сервер, который успешно обслуживает http-файлы.
Комментарии:
1. Я считаю, что это вызвано перекрестным запросом источника. Можете ли вы проверить заголовок вашего запроса и посмотреть, включен ли CORS, а также проверить, добавлен ли URL-адрес в массив validDomain[] в манифесте.
2. @Trinetra-MSFT вы правы. Он отсутствовал в массиве validDomain.
3. Полезно знать, что проблема решена
4. Пожалуйста, отметьте этот вопрос закрытым, приняв ответ
5. Спасибо , что приняли ответ, это поможет другим членам сообщества с подобным вопросом. Не могли бы вы уделить одну минуту, чтобы сообщить нам, как мы это сделали, нажав на эту ссылку обратной связи ?
Ответ №1:
Я считаю, что это вызвано перекрестным запросом источника. Можете ли вы проверить заголовок вашего запроса и посмотреть, включен ли CORS, а также проверить, добавлен ли URL-адрес в массив validDomain[] в манифесте