Asp.net core ASP.NET Core Swagger无法在Chrome中工作,出现CORS错误

Asp.net core ASP.NET Core Swagger无法在Chrome中工作,出现CORS错误,asp.net-core,.net-core,swagger-ui,Asp.net Core,.net Core,Swagger Ui,我一直在关注帮助,我在Chrome中收到以下错误: 无法从服务器读取。它可能没有适当的访问控制原点设置 它在IE10中工作,但是它似乎没有接受更改 我发现下面的条目很不幸,它指的是在grunt下更改它,而现在它在gulp下工作 我还尝试更改ASP.NET core中的CORS设置: public void ConfigureServices(IServiceCollection services) { // Add framework services.

我一直在关注帮助,我在Chrome中收到以下错误:

  • 无法从服务器读取。它可能没有适当的访问控制原点设置
它在IE10中工作,但是它似乎没有接受更改

我发现下面的条目很不幸,它指的是在grunt下更改它,而现在它在gulp下工作

我还尝试更改ASP.NET core中的CORS设置:

 public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddApplicationInsightsTelemetry(Configuration);

        services.AddMvc();

        // Inject an implementation of ISwaggerProvider with defaulted settings applied
        services.AddSwaggerGen();


        services.ConfigureSwaggerGen(options =>
        {
            options.SingleApiVersion(new Info
            {
                Version = "v1",
                Title = "Status API",
                Description = "A simple example ASP.NET Core Web API!",
                TermsOfService = "None",
                Contact = new Contact { Name = "A Persone", Email = "some-support@some-company.com", Url = "http://www.some-company.com/" },
                License = new License { Name = "Use under LICX", Url = "http://url.com" }
            });
        });

        services.AddCors(options =>
        {
            options.AddPolicy("AnyOrigin", builder =>
            {
                builder
                    .AllowAnyOrigin()
                    .AllowAnyMethod();
            });
        });
    }

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseApplicationInsightsRequestTelemetry();

        app.UseApplicationInsightsExceptionTelemetry();

        app.UseMvc();

        // Enable middleware to serve generated Swagger as a JSON endpoint
        app.UseSwagger();

        // Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
        app.UseSwaggerUi();

        app.UseCors("AnyOrigin");

    }
不幸的是,这没有任何区别


关于如何通过更改gulp设置或.NET更改来解决此问题的建议是非常受欢迎的

通常这应该可以解决问题,您只需要它具有相同的策略名称。如果您想将过滤器应用于所有请求/路由,我认为没有必要添加过滤器

//配置服务
services.AddCors(选项=>
{
options.AddPolicy(“AnyOrigin”,builder=>
{
建设者
.AllowAnyOrigin()
.AllowAnyMethod();
});
});
//配置
附录UseCors(“任何来源”);
//在此处注册其他中间件,如UseMvc或UseStaticFiles,具体取决于您是否
//是否希望静态文件受cors影响?请将其放在UseCors调用之前或之后
更新

正如上面的评论中提到的,中间件是以注册的方式执行的。请求在Cors中间件接收到它之前到达APi控制器

您的配置方法必须如下所示:

public void配置(IApplicationBuilder应用程序、IHostingEnvironment环境、iLogger工厂)
{
loggerFactory.AddConsole(Configuration.GetSection(“Logging”);
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
//它必须放在UseMvc之前和之前或之后
//使用StaticFiles,具体取决于您是否希望保存静态文件
//是否启用Cors
附录UseCors(“任何来源”);
app.UseMvc();
//使中间件能够将生成的Swagger作为JSON端点提供服务
app.UseSwagger();
//使中间件能够服务于招摇过市的ui资产(HTML、JS、CSS等)
app.UseSwaggerUi();
}

1。AddCors只添加依赖项,不添加中间件。这就是你对UseCors所做的。你用UseCors吗?2.如果是,它的配置是什么?3.您是否在两个不同的端口上运行两个独立的应用程序?IE威胁相同的主机+模式,但不同的端口作为相同的来源,Firefox和Chrome没有。4它是发生在所有请求上,还是仅发生在除get之外的请求上?其中一个浏览器在发送请求之前不发送飞行前预检,不知道是哪一个。您是否从服务器获取异常?异常中间件从请求中删除CORS头。如果我在localhost:8080上运行swagger UI,在localhost:17237上运行API,那么您的CORS设置是错误的。显示您使用的CORS策略。正如我所说,IE将不同的端口视为同一个源,不应用同一个源策略。我还尝试添加以下代码,但遗憾的是没有帮助:app.UseCors(builder=>builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());但是Usecor在哪里?在UseMvc之前还是之后?订单很重要,因为请求将由中间件按照它们在
UseXxx
调用中注册的顺序进行处理。当使用新的CorsAuthorizationFilterFactory(“AllowSpecificationCorigin”)时,您还需要添加一个同名的策略。实际上,我曾多次尝试这样做,但仍然遇到同样的问题。我不确定这是否是因为swagger没有通过相同的中间件,尽管它运行在相同的端口上。我还更改了ConfigureServices以使其更安全,这正是我对swagger所需要的:services.AddCors(options=>{options.AddPolicy(“AllowSpecificOrigin”),builder=>builder.WithOrigins(“);});