azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源
Posted
技术标签:
【中文标题】azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源【英文标题】:azure app service and asp.net core: origin has been blocked by CORS policy even AllowAnyOrigin 【发布时间】:2020-06-10 23:08:51 【问题描述】:我已经使用 angular 8(前端)+ asp.net core 2.2(web api)开发了一个 SaaS Web 应用程序,并且我使用了下面的代码来允许在 asp.net 核心上的 StartUp.cs 文件的任何来源。部署 Azure 应用服务后,除了一页外,一切都很好,当我发送发布请求时收到以下错误消息:
返回前端concole的错误信息: 从源“https://xxxxxxxxx.com”访问“https://api.xxxxxxxxx.com/api/stageProducts/addProduct”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
在 Startup.cs 上
app.UseCors(x => x.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
你能建议吗?
【问题讨论】:
【参考方案1】:这是由与 CORS 无关的其他代码错误引起的。不知何故,asp.net 核心显示 CORS 错误消息。
【讨论】:
【参考方案2】:在你的 ConfigureServices 中试试这个
services.AddCors(options =>
options.AddPolicy("AllowAllOrigins",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
);
);
在您的配置方法中执行以下操作
app.UseCors("AllowAllOrigins");
【讨论】:
感谢您的回答。但是,我得到了以下警告。我理解警告。但我无法指定个人来源,因为我的应用程序是 SaaS 应用程序,我需要允许任何自定义域名使用我的 web api。你能给些建议么?警告:Microsoft.AspNetCore.Cors.Infrastructure.CorsService[11] CORS 协议不允许同时指定通配符(任何)来源和凭据。如果需要支持凭据,请通过列出各个来源来配置策略。 由于您使用的是.Net core 2.2,所以我更新了我的答案!【参考方案3】:从源“https://xxxxxxxxx.com”访问“https://api.xxxxxxxxx.com/api/stageProducts/addProduct”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
请检查您是否在您的后端(Web api)应用程序的Startup.cs
中enabled CORS,如下所示。
app.UseCors(x => x.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
app.UseHttpsRedirection();
app.UseMvc();
部署azure应用服务后,除了一页,一切都很好,当我发送帖子请求时收到以下错误消息
您在 Azure 应用服务上托管您的后端(Web api)应用,因此您还可以指定应允许在 Azure 门户上对您的应用服务进行跨域调用的来源。
【讨论】:
谢谢。但是,此问题仅发生在从站点下载图像并将其上传到我的 Cloudinary 库的页面上。其他页面喜欢展示产品都很好。 错误消息是“api.xxxxx.com/api/stageProducts/6211 的 Http 失败响应:0 未知错误”SEC7120:[CORS] 源 'xxxxxx.com' 在 Access-Control- 中找不到 'xxxxx.com' 'api.xxxxxx.com/api/stageProducts/addProduct' 处的跨域资源的 Allow-Origin 响应标头。 HTTP503: SERVICE UNAVAILABLE - 服务暂时超载。 (XHR)POST - api.xxxxx.com/api/stageProducts/addProduct 用户 * 启用所有来源【参考方案4】:您能提供更多信息吗?就像你得到什么错误代码一样,因为当你得到一个 500 服务器错误时,你的代码可能有问题。您也可以在 azure 上的应用服务中查看更详细的错误消息。
【讨论】:
是的,请看下面的错误信息截图: SEC7120: [CORS] The origin 'xxxxxx.com' did not find 'xxxxxx.com' in the Access-Control-Allow-Origin response header对于“api.xxxxxx.com/api/stageProducts/addProduct”的跨域资源。 HTTP503: SERVICE UNAVAILABLE - 服务暂时超载。 (XHR)POST - api.xxxxxxx.com/api/stageProducts/addProduct 您可以进入天蓝色的“应用服务”,如果您进入“诊断和解决问题”,然后搜索“应用程序日志”,您通常会获得有关您遇到的错误的详细信息. 感谢您的信息。我已经检查了“诊断和解决问题”-> 应用程序事件日志。我找不到与此相关的任何错误。你能告诉asp.net核心在哪里记录真正的错误信息吗?我是否需要在 azure 应用服务上的“应用服务日志”上启用应用程序日志记录?或者我应该如何捕获详细的真实错误消息?谢谢。 根据我过去的经验,如果应用程序出现错误,您会得到它...以上是关于azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源的主要内容,如果未能解决你的问题,请参考以下文章
由 Azure Active Directory v1 保护的 asp.net 核心 webapi
无法通过 asp.net 核心服务器端将 ~200mb 文件上传到 azure blob 存储
使用 JWT 令牌保护 asp.net 核心 Web api 时如何从 Azure AD 获取用户