【问题标题】:CORS Error while calling .Net WebAPI from Axios从 Axios 调用 .Net WebAPI 时出现 CORS 错误
【发布时间】:2021-06-29 15:54:21
【问题描述】:

我有一个登录表单,我在其中使用 Axios 调用 .Net API 做出反应

axios
.post(
    'https://localhost:5001/login',
    {
        email: 'abc@gmail.com',
        password: '12345',
    },
    {
        headers: {
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*',
        },
    },
)
.then(function (response) {
    console.log(response)
})
.catch(function (error) {
    console.log(error)
})

下面是 Startup.cs 在 API 端处理 CORS 的代码

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
    });
    services.AddCors(option => 
    {
        option.AddPolicy("CorsPolicy", policy =>
        {
            policy.AllowAnyMethod().AllowAnyHeader().WithOrigins("http://localhost:3000/");
        });
    }); 
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1"));
    }
    // app.UseHttpsRedirection();
    app.UseRouting();
    app.UseCors("CorsPolicy");
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

在浏览器的控制台中,我收到以下错误:

Access to XMLHttpRequest at 'https://localhost:5001/login' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Error: Network Error
    at createError (createError.js:16)
    at XMLHttpRequest.handleError (xhr.js:84)

POST https://localhost:5001/login net::ERR_FAILED

我已经使用 VS 代码的 REST Client 扩展测试了 API。 API 工作正常,但从浏览器调用时出现这些错误。

【问题讨论】:

    标签: c# reactjs asp.net-core .net-core cors


    【解决方案1】:

    尝试将 AddCors 移动到配置部分的顶部,在 AddControllers 之前。还要更改语法并从 url 中删除尾随的“/”:

    
    services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
                {
                    builder.WithOrigins("http://localhost:3000")
                           .AllowAnyMethod()
                           .AllowAnyHeader();
                }));
    

    【讨论】:

    • 嗨@Sergey,删除我现有代码中的尾随“/”有效。但是为什么那个“/”会导致问题呢?
    • 如果 URL 以 / 结尾,则 ulrs 的比较总是返回 false。
    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2020-01-21
    • 1970-01-01
    • 2020-08-07
    • 2019-09-28
    相关资源
    最近更新 更多