请求的资源上存在“Access-Control-Allow-Origin”标头

Anj*_*ali 1 cors .net-core asp.net-core-webapi angular

我正在尝试从 angular 应用程序连接到我的 .net 核心 API。当我尝试这样做时,我收到一条错误消息:

Access to XMLHttpRequest at 'https://localhost:44378/api/recloadprime' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

下面是来自我的 angular 应用程序的控制台消息:

在此处输入图片说明

这是我为解决错误所做的工作。我在 startup.cs 文件的 ConfigureServices 方法中添加了 services.addCors :

public void ConfigureServices(IServiceCollection services)
    {

        services.AddCors(options =>
        {
            options.AddPolicy("AllowAnyCorsPolicy", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
            services.AddControllers();
           services.AddDbContext<db_recloadContext>();

    }
Run Code Online (Sandbox Code Playgroud)

在configure方法中,我放了以下代码:

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

            }
            else
            {
                app.UseHsts();
            }
           app.UseCors("AllowAnyCorsPolicy");
           app.UseHttpsRedirection();
           app.UseRouting();
           app.UseAuthorization();
           app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有以下代码:

namespace RecLoad.Controllers
{
    [Route("api/[controller]")]
    [EnableCors("AllowAnyCorsPolicy")]
    public class RecLoadPrimeController : ControllerBase
    {
        private readonly db_recloadContext _context;

        public RecLoadPrimeController(db_recloadContext context)
        {

            _context = context;
        }
Run Code Online (Sandbox Code Playgroud)

我按照 Microsoft 文档中给出的说明和 stackoverflow 帖子之一进行操作:

/sf/ask/2953983021/
Run Code Online (Sandbox Code Playgroud)

和微软文章:

https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1
Run Code Online (Sandbox Code Playgroud)

我花了很多时间浏览其他文档并在 startup.cs 文件中尝试了不同的代码,但这个错误并没有消失。

下面是我运行良好的 api:

[HttpGet]
       public ActionResult<string> Get()
        {

            return "This is a test";

        }
Run Code Online (Sandbox Code Playgroud)

以下是我的开发人员工具的标题:

在此处输入图片说明

我还在我的 chrome 浏览器中启用了 CORS 扩展。下面是图片:

在此处输入图片说明

任何帮助将不胜感激。

Mar*_*cik 5

要使其工作,您可以尝试以下操作:

1) 在ConfigureServices方法中,调用AddCors配置 CORS 服务,最初,允许任何来源:

services.AddCors(options => 
{
    options.AddPolicy("AllowAnyCorsPolicy", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
});
Run Code Online (Sandbox Code Playgroud)

2) 在Configureadd 方法中UseCors,这将中间件添加到 Web 应用程序管道:

app.UseRouting();
app.UseCors("AllowAnyCorsPolicy");
app.UseMvc();
Run Code Online (Sandbox Code Playgroud)

由于 ASP.NET Core 3.1.UseCors()需要在 之后调用.UseRouting(),如https://github.com/dotnet/aspnetcore/issues/17830 中所述

当此初始配置工作时,可以稍后根据您的要求对其进行修改。