.NET Core CORS 策略块

Posted

技术标签:

【中文标题】.NET Core CORS 策略块【英文标题】:.NET Core CORS policy block 【发布时间】:2020-11-02 11:52:53 【问题描述】:

iis服务器上有两个应用,一个是和前端反应,一个是后端。 web api 作为子域工作。例如,api.mydomain.com。

当我从前端发送 Web api 请求时,出现以下错误。

在“https://api.mydomain.com/api/auth/login”访问 XMLHttpRequest 来自原点“https://.mydomain.com”已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

        services.AddCors(options =>
        
            options.AddPolicy("AllowOrigin",
                builder => builder.WithOrigins("https://*.mydomain.com").AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
        );

app.UseCors("AllowOrigin");

我是否需要更改 IIS 设置,我应该在哪里更改?

解决方案:

    首先,将 web config 中的所有 cors 设置设置为“*”。 其次,从 plesk 面板关闭 modsecurity。

【问题讨论】:

没人能帮忙吗?我解决不了问题 我认为问题在于您的网络 API 不知道如何为预检请求返回 20 倍响应。因此,您需要修改代码以允许 OPTION 返回正确的响应。 @JokiesDing 我发现了问题,问题是plesk面板中的modsecurity被打开了。 【参考方案1】:

如果您在 IIS 上托管 Web 应用程序,您还需要让 IIS 了解 cors 策略。

您必须按照此处的说明编辑您的网络配置:

https://enable-cors.org/server_iis7.html

【讨论】:

出现此错误 --> 对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。【参考方案2】:

在 2.0.0 版本中实现

options.AddPolicy("MyCorsPolicy",
       builder => builder
          .SetIsOriginAllowedToAllowWildcardSubdomains()
          .WithOrigins("https://*.mydomain.com")
          .AllowAnyMethod()
          .AllowCredentials()
          .AllowAnyHeader()
          .Build()
       );
    app.UseCors("MyCorsPolicy");

https://docs.microsoft.com/fr-fr/dotnet/api/microsoft.aspnetcore.cors.infrastructure.corspolicybuilder.setisoriginallowedtoallowwildcardsubdomains?view=aspnetcore-2.2

【讨论】:

"Voodoo programming refers to the practice of getting a program to produce desired output by using guesses, trial-and-error, cookbooks, copy-pasting from online resources, or similar techniques without truly understanding the underlying problem"。解释这段代码的作用以及为什么 OP 应该使用它。 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。不工作。

以上是关于.NET Core CORS 策略块的主要内容,如果未能解决你的问题,请参考以下文章

仅在文件上传中出现 Asp.Net Core API CORS 策略错误

C# Net Core:在 API 中启用 Cors 后,仍处于 CORS 策略阻止状态

.Net Core Cors中间件解析

.Net Core 仅在上传文件时被 CORS 策略错误阻止

在 .Net Core 中为 WEB API 控制器定义不同的(不同于全局的)CORS 策略

带有 Javascript 的 Dot Net Core Web API - CORS 策略错误