4

我在我的新项目中实现了 ocelot,我使用 ocelot 一次性创建了我的服务的集成,但是当我尝试在我的 api 网关中发布、放置、路径或删除资源时,浏览器会向我显示消息

无法加载http://localhost:8080/api/prospects:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问源“ http://localhost:8888 ”。响应具有 HTTP 状态代码 404。

我尝试在安装和实现包 Microsoft.AspNetCore.Cors 的网关中配置 cors

  public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors();
        services.AddOcelot(Configuration)
            .AddCacheManager(x =>
            {
                x.WithMicrosoftLogging(log =>
                {
                    log.AddConsole(Microsoft.Extensions.Logging.LogLevel.Debug);
                })
                .WithDictionaryHandle();
            }); ;
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        app.UseCors(
            options => options.WithOrigins("http://localhost:8888").AllowAnyMethod()
        );
        app.UseOcelot().Wait();
    }
4

1 回答 1

1

这个问题与 Ocelot 无关,CORS 对所有 .net core api 都一样

尝试首先像这样为 AnyOrigin 实施 CORS

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
        });

        services.AddMvc();
        services.AddOcelot(Configuration);
    }

并在配置方法中添加这一行app.UseCors("CorsPolicy");

所以在那之后,如果 CORS 工作,而不是.AllowAnyOrigin()添加.WithOrigins("yourdomain")和它

有关更多信息,请参阅:https ://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

于 2019-01-29T19:53:04.177 回答