启用 Cors 的 ASP.NET Core API 不起作用

Posted

技术标签:

【中文标题】启用 Cors 的 ASP.NET Core API 不起作用【英文标题】:ASP.NET Core API Enabling Cors not working 【发布时间】:2021-02-22 04:04:28 【问题描述】:

第一次尝试使用 asp.net core 制作 api,我使用的是 ASP.NET Core 3.1。当我尝试发送 GET 请求时遇到此控制台错误:

Access to XMLHttpRequest at 'https://localhost:5001/api/items/1' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 

我在这个网站和其他网站上尝试了很多解决方案,但它们似乎并不适合我。 这是我的 javascript 方面的内容:

const sendRequest = async function(url) 
    try 
        let response = await axios.get(url);
        return response;
     catch (error) 
        console.error(error);
        return [];
    
;

这是我在 Startup.cs 中的内容

public void ConfigureServices(IServiceCollection services)
        
            services.AddCors(options =>
            
                options.AddPolicy("AllowMyOrigin",
                builder => builder.WithOrigins(
                    "http://localhost:8080/")
                    .WithMethods("POST", "GET", "PUT")
                    .WithHeaders("*")
                    );
            );
            services.AddDbContext<DBContext>(opt =>
            opt.UseSqlServer(Configuration.GetConnectionString("DatabaseName")));
            services.AddControllers();
            
            
        

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        
            
            //app.UseAuthentication();
            if (env.IsDevelopment())
            
                app.UseDeveloperExceptionPage();
            

            app.UseHttpsRedirection();

            app.UseRouting();
            app.UseCors("AllowMyOrigin");
            //app.UseAuthorization();
            //app.UseAuthentication();
            app.UseEndpoints(endpoints =>
            
                endpoints.MapControllers();
            );
        

如果信息太少,我会尝试澄清,但就像我说的,这是我第一次做这样的事情来处理 cors 政策。

【问题讨论】:

【参考方案1】:

builder.WithOrigins("http://localhost:8080/")

请注意,指定的 URL 不能包含尾部斜杠 (/)。请修改如下代码,然后检查它是否运行良好。

services.AddCors(options =>

    options.AddPolicy("AllowMyOrigin",
        builder => builder.WithOrigins(
            "http://localhost:8080")
        .WithMethods("POST", "GET", "PUT")
        .AllowAnyHeader()
        );
);

【讨论】:

【参考方案2】:

请尝试在里面添加这个

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());

【讨论】:

以上是关于启用 Cors 的 ASP.NET Core API 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 中启用 CORS

在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)

如何在 Asp.Net Core 3.0 WebAPI 中启用 CORS

ASP.NET Core Cors 已启用但无法正常工作

启用 Cors 的 ASP.NET Core API 不起作用

如何在 ASP.net Core WebAPI 中启用 CORS