ASP.NET Core CORS 设置在 Bicep 部署后停止工作

问题描述 投票:0回答:1

我们在 Azure Web 应用程序中部署了 ASP.NET Core Web API 解决方案。我们将 ASP.NET Core 项目部署到 Azure,一切都按预期进行。然而,当我们重新部署 Bicep 基础设施脚本来创建 Web 应用程序时,CORS 配置似乎丢失了,并且 API 开始拒绝跨站点请求。

重新启动 Web 应用程序没有帮助,但重新部署它却有帮助。我们尝试通过重新启动/启动/停止 Web 应用程序来触发此中断,但这不会破坏 cors 配置。

关于arm模板如何破坏ASP.NET Core CORS有什么想法吗?没有为 Web 应用程序配置 cors。

我们在 API 中使用以下 CORS 配置:

(...)
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

builder.Services.AddCors(options =>
{
    List<string> allowedOrigins = ["url"];

    options.AddPolicy(name: MyAllowSpecificOrigins,
                      policy =>
                      {
                          policy
                            .WithOrigins([.. allowedOrigins])
                            .AllowAnyMethod()
                            .AllowAnyHeader();
                      });
});
(...)

var app = builder.Build();

app.UseExceptionHandler();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseCors(MyAllowSpecificOrigins);

app.UseAuthentication();
app.UseAuthorization();

app.MapControllers()
    .RequireAuthorization();

app.Run();

这是网络应用程序的二头肌模板:

resource appServicePlan 'Microsoft.Web/serverfarms@2023-01-01' = {
  name: appServicePlanName
  location: location
  properties: {
    reserved: false
  }
  sku: {
    ...
  }
}

resource apiService 'Microsoft.Web/sites@2023-01-01' = {
  name: apiAppName
  location: location
  identity: {
    type: 'SystemAssigned'
  }  
  properties: {
    httpsOnly: true
    serverFarmId: appServicePlan.id
    siteConfig: {
      alwaysOn: true
      http20Enabled: true
      appSettings:[
        {
          name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
          value: applicationInsights.properties.ConnectionString
        }
        {
          name: 'ApplicationInsightsAgent_EXTENSION_VERSION'
          value: '~2'
        }
      ]
    } 
  }
}

resource apiServiceSiteConfig 'Microsoft.Web/sites/config@2023-01-01' = {
  parent: apiService
  name: 'web'
  properties: {
    cors: null
    netFrameworkVersion: 'v8.0'
    use32BitWorkerProcess: false
    webSocketsEnabled: true
    alwaysOn: true
    managedPipelineMode: 'Integrated'
    http20Enabled: true
    minTlsVersion: '1.2'
    scmMinTlsVersion: '1.2'
    ftpsState: 'FtpsOnly'
    localMySqlEnabled: false
  }
}
c# asp.net-core cors asp.net-core-webapi azure-bicep
1个回答
0
投票

在您的二头肌文件中,仅定义了两个应用程序设置。每次运行 bicep 文件时,部署都会删除可能导致 Web 应用程序正常工作的所有其他应用程序设置。

如果你想保留未通过二头肌定义的应用程序设置,你可以看看这篇文章:

© www.soinside.com 2019 - 2024. All rights reserved.