【发布时间】:2022-01-07 18:48:30
【问题描述】:
我有一个 Angular 应用程序,它使用 OneDrive/Sharepoint 来存储它创建的文件。身份验证工作正常,我可以成功保存文件。我在下载使用 Angular HttpClient 创建和存储的文件时遇到问题。
我的代码如下所示:
export class MicrosoftService {
private graphUri = 'https://graph.microsoft.com/v1.0';
constructor(private http: HttpClient) {}
public loadFile(id: string, next: (saved: string) => void): void {
this.http.get(this.graphUri + '/me/drive/items/' + id + '/content', { headers: this.getOAuthHeader() })
.subscribe((response: any) => {
console.log(response.toString());
next(response.toString());
});
}
getOAuthHeader(): HttpHeaders {
// a bunch of stuff that generates the OAuth headers, definitely works
}
}
很明显,当我收到回复时,我会做其他事情。
问题是,当GET 请求被触发时,它会正确地发出图形请求,然后returns a 302 redirect 到https://foozlecorporation-my.sharepoint.com/drive/path/_layouts/15/download.aspx?UniqueId=a-bunch-of-url-params - 这也是正确的,我可以从 REST 客户端下载内容,但是在浏览器(当前使用 Safari)重定向引发 Browser cannot load [...url...] due to access control checks 错误。
我的应用程序标头中有Access-Control-Allow-Origin: *,这大概是我首先可以使用Graph 的原因,但Sharepoint 响应不包括Access-Control-Allow-Origin。我还需要做什么?
【问题讨论】:
-
您在不使用 Safari 时是否遇到同样的错误?我注意到有时 Safari 会以不同的方式解释此错误,而其他浏览器会提供更好的洞察力
-
@jub0bs 它没有添加任何
Access-Control-Allow-Origin标头。 -
@glenatron 你的问题。当 CORS 请求以跨域重定向响应时,将对新目标源执行新的 CORS 访问控制检查。如果有问题的服务器没有为 CORS 配置,那么你就不走运了。
-
@Jub0bs,我已经编辑了这个问题,你为什么不重新格式化你的评论作为答案,以便有更清晰的记录。
标签: angular typescript safari cors sharepoint-rest-api