【问题标题】:azure app service and asp.net core: origin has been blocked by CORS policy even AllowAnyOriginazure 应用服务和 asp.net 核心:CORS 策略甚至 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());

你能建议吗?

【问题讨论】:

    标签: asp.net-core azure-web-app-service asp.net-core-webapi asp.net-core-2.2


    【解决方案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.csenabled CORS,如下所示。

      app.UseCors(x => x.AllowAnyOrigin()
                          .AllowAnyHeader()
                          .AllowAnyMethod());
      
      app.UseHttpsRedirection();
      
      app.UseMvc();
      

      部署azure应用服务后,除了一页,一切都很好,当我发送帖子请求时收到以下错误消息

      您在 Azure 应用服务上托管您的后端(Web api)应用,因此您还可以指定应允许在 Azure 门户上对您的应用服务进行跨域调用的来源。

      【讨论】:

      【解决方案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 应用服务上的“应用服务日志”上启用应用程序日志记录?或者我应该如何捕获详细的真实错误消息?谢谢。
      • 根据我过去的经验,如果应用程序出现错误,您会得到它...
      猜你喜欢
      • 2022-12-05
      • 2020-08-29
      • 2020-09-21
      • 2020-05-03
      • 2021-09-15
      • 2019-12-29
      • 1970-01-01
      • 2019-08-05
      • 2020-09-11
      相关资源
      最近更新 更多