【问题标题】:.Net Core / Angular 6 - Origin is not allowed by Access-Control-Allow-Origin.Net Core / Angular 6 - Access-Control-Allow-Origin 不允许来源
【发布时间】:2019-02-01 03:45:29
【问题描述】:

我想知道为什么在尝试将数据从前端发送到后端时出现“Access-Control-Allow-Origin 不允许来源”错误。在前端我使用 angular 6,在后端我使用 Asp.Net Core 2.1 (web api)。我按照他们在这篇 Microsoft 文章中所说的设置一切:

https://docs.microsoft.com/pl-pl/aspnet/core/security/cors?view=aspnetcore-2.1

但它仍然无法正常工作。我不知道是 Angular 应用设置有问题还是我在这里做错了什么。

后端工作于:https://localhost:5001/

前端工作于:https://localhost:4200/

.net 核心应用 - startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options => options
        .AddPolicy("AllowSpecificOrigin", p =>
            p.WithOrigins("https://localhost:4200")
                .AllowAnyMethod()
                .AllowCredentials()
                .AllowAnyHeader()));

    services.AddResponseCaching();

    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
    }
    else {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();

    app.UseCors("AllowSpecificOrigin");

    app.UseResponseCaching();

    app.UseMvc();
}

我还尝试在控制器上使用 [EnableCors("AllowSpecificOrigin")] 属性,这给了我这个错误,但仍然无法正常工作。我不确定是否值得写,但我所有的 HttpGet 方法都可以正常工作。因此,这仅适用于 HttpPost 无法正常工作。最奇怪的是,昨天一切正常,没有任何问题,cors 配置等没有更改,今天无法连接前端和后端。

PS。我也在 startup.cs 中的 services.AddMvc() 下写了这个,但它也没有帮助:

services.Configure<MvcOptions>(options => {
    options.Filters.Add(new CorsAuthorizationFilterFactory(PolicyName));
});

【问题讨论】:

  • 您的两个应用程序都使用 https 吗?
  • @YankovViacheslav 是的,两个应用程序都使用 https
  • 我也有同样的问题。我什至可以看到我的请求,包括标题,但不知何故 .NET 端没有看到它。

标签: .net asp.net-core angular6 asp.net-core-webapi


【解决方案1】:

我检查了日志,这是 ef core 中的问题。昨天我在项目中创建了 EF 迁移,当它生成数据库时,它会在属性上创建两个不需要的唯一键。日志错误:

SQLite Error 19: 'UNIQUE constraint failed: Expense.FromUserId'.

我在 DbContext 的 OnModelCreating 方法中删除了这两行(这是创建额外的唯一约束),现在一切正常:

modelBuilder.Entity<Expense>().HasOne(x => x.FromUser).WithOne();
modelBuilder.Entity<Expense>().HasOne(x => x.ToUser).WithOne();

我在浏览器中收到“Access-Control-Allow-Origin 不允许来源”错误,这真的很奇怪。谁能解释一下?

【讨论】:

    【解决方案2】:

    试试我的 useCors

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            .......
    
    
    
            app.UseCors(cfg => { cfg.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().WithExposedHeaders("X-Metadata"); });
            app.UseAuthentication();
            app.UseMvc();
        }
    }
    

    【讨论】:

    • 这也没有解决,但感谢您的帮助。
    猜你喜欢
    • 2013-02-05
    • 2011-10-27
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多