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 也阻止了来源的主要内容,如果未能解决你的问题,请参考以下文章

JWT 和 asp.net(核心)Web 应用程序

由 Azure Active Directory v1 保护的 asp.net 核心 webapi

无法通过 asp.net 核心服务器端将 ~200mb 文件上传到 azure blob 存储

使用 JWT 令牌保护 asp.net 核心 Web api 时如何从 Azure AD 获取用户

Azure WebApp Asp.NET Core 2 错误:启动应用程序时出错

用于 asp.net 核心的 ELMAH