【问题标题】:Disable CORS middleware of Azure app service禁用 Azure 应用服务的 CORS 中间件
【发布时间】:2018-01-19 13:40:02
【问题描述】:

我写了一些代码来处理CORS 到我的Web Api(.Net Core)。这些代码可以在我的本地和测试服务器(Azure 应用服务)上完美运行,但不能在生产环境(Azure 应用服务)上运行。它给出了错误-

XMLHttpRequest 无法加载 http://myapiproduction.co/token。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://myuidashboard.co' 因此不允许访问。

我在appsettings.Production.json 中提供了正确的允许来源网址。我从 Azure 应用服务(生产环境)的 CORS 部分删除了所有值(*)。

当我们从应用服务的 CORS 部分中删除所有内容时,我们的代码逻辑应该可以工作,因为一次只有一个中间件可以工作,无论是应用服务的 CORS 中间件还是我们的 Web Api 代码逻辑。

Web API (Startup.cs)-

var allowedOriginsArr = Configuration["AppSettings:AllowedOrigins"].Split(','); //Example- "http://myuidashboard.co"
services.AddCors(options =>
{
  options.AddPolicy("AllowAllCorsPolicy",
    builder => builder.WithOrigins(allowedOriginsArr)
               .WithMethods("GET", "POST", "PATCH", "PUT", "DELETE", "OPTIONS")
               .AllowAnyHeader()
               .WithExposedHeaders("X-Auth-Token")
               .AllowCredentials());
});

所以,我的问题是 - 我需要做任何其他设置来禁用 Azure 应用服务的 CORS 中间件吗?我想完全通过代码(Api 逻辑)控制CORS

【问题讨论】:

  • 确保您的环境变量设置为访问 appsettings.production.json。
  • 如果它在测试 Azure 中有效,但在 prod Azure 中无效?听起来这些资源的配置不同。忽略GUI,看数据。比较两种资源的 ARM 模板。研究差异。他们中的任何一个在 CORS 部分中有任何内容吗?如果 prod 有 CORS 部分,请将其删除并重新部署。
  • 您能运行探查器跟踪并向我们展示异常选项卡的结果吗?转到诊断和解决 > 诊断工具 > .NET Profiler Trace 并向我们展示结果。有时 CORS 是由于无效的日期/时间值引起的(我知道这没有意义,但我已经看到了)

标签: azure cors asp.net-core-webapi azure-app-service-envrmnt


【解决方案1】:

尝试使用 Kudu 或命令行在关联的 appservice 中检查已部署的 appsettings.json。可能是未应用应用设置。

关联应用服务>开发工具下>高级工具(Kudu)

关联应用服务 > 开发工具下 > 控制台

【讨论】:

    【解决方案2】:

    我认为没有任何额外的设置可以从 Azure 应用服务端显式禁用它。 Microsoft 本身建议使用您的 CORS 实用程序而不是内置的 -Refer Here

    文档提供的注释 -

    Don't try to use App Service CORS and your own CORS code together. When used together, App Service CORS takes precedence and your own CORS code has no effect.
    

    【讨论】:

      【解决方案3】:

      我的 azure 网站是在 vb.net 中编程的,但最终我不得不这样做,然后它才起作用:

      Dim strMethod As String 
      
      strMethod = Request.HttpMethod.ToUpper
      
      If InStr(strMethod, "OPTIONS") Then
      
         Response.Flush()
      
      End If
      

      【讨论】:

        猜你喜欢
        • 2021-10-31
        • 2019-06-30
        • 2018-12-19
        • 2018-08-25
        • 2016-07-11
        • 1970-01-01
        • 1970-01-01
        • 2017-04-17
        • 2018-04-22
        相关资源
        最近更新 更多