CORS 问题:C# API 请求适用于一个域,但不适用于另一个域

Posted

技术标签:

【中文标题】CORS 问题:C# API 请求适用于一个域,但不适用于另一个域【英文标题】:CORS Issue: C# API requests work for one domain, but not to the other 【发布时间】:2021-07-19 21:30:34 【问题描述】:

我遇到了 CORS 问题。我有一个 Internet IIS 服务器,其中两个域共享相同的代码(多租户应用程序)和一个用于 API 的域。

API 配置为接受 CORS:

启动ConfigureServices():

    services.AddCors(options =>
    options.AddDefaultPolicy(builder => builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().SetIsOriginAllowed(origin => true).AllowCredentials()));
services.AddMvc();

启动Configure():

    app.UseCors(options =>
    options.AllowAnyMethod()
        .AllowAnyHeader()
        .SetIsOriginAllowed(origin => true)
        .AllowCredentials()
);

javascript 请求:

axios.post(apiurl + '/api/Usuario/primeiroacesso', '"' + this.email + '"',

    headers:
    
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE',
        'Access-Control-Allow-Headers': 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers',
        'Content-Type': 'application/json',
        hash: _hc
    
)
.then(res => 
    console.log(res);
    if (res.status == 200) 
        alert('Verifique sua conta de email');
     else 
        alert("O email informado não foi encontrado");
    
)

此代码适用于 Domain1 请求,但是当我在 Domain2 上执行相同请求时,我收到了 CORS 错误。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

试试这个 API 语法

public void ConfigureServices(IServiceCollection services)
        
            services.AddCors(o => o.AddPolicy("AllowAnyOrigins", builder =>
            
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
            ));
            
        

        
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        
            
             ......
            app.UseCors("AllowAnyOrigins");
            .....
     

并从 javascript 中删除所有 Cors 标头,除非您确定需要它们。

【讨论】:

以上是关于CORS 问题:C# API 请求适用于一个域,但不适用于另一个域的主要内容,如果未能解决你的问题,请参考以下文章

对外部 API 的 HTTP 请求适用于 .NET,但不适用于 React(CORS 问题)

Cors Ajax 请求适用于子域但不适用于主域

为啥 CORS 适用于 API 请求,但不适用于我的 Nginx 配置中的媒体文件(例如 mp4、webm)?

多个 CORS 适用于 GET 但不适用于 PUT/POST 与飞行前请求 Web api 2

CORS 仅适用于一个请求 [重复]

使用 CORS 与 LocomotiveJs 一起休息 API。适用于本地机器,但不适用于 Amazon 或 Heroku