CORS 的这种用法是否正确?

Is this usage of CORS correct?

在 VS2019 调试(IIS Express)API 服务和使用该服务的 Web 应用程序时,我收到“从来源 'apporigin' 访问 'theservice' 处的 XMLHttpRequest 已被 CORS 阻止策略:请求的资源上不存在 'Access-Control-Allow-Origin' header。

启动方法

public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddCors();
    }

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

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

        app.UseCors(options => {
            options.AllowAnyOrigin();
        });
    }

控制器 Class 和获取方法都具有 [EnableCors()] 属性。

对我来说,这似乎是正确的,但我继续收到丢失的来源 header 消息。在这种情况下,我是否正确实施了 CORS?

https://whosebug.com/users/6527049/vivek-nuna评论里有答案。 将 app.UseCors(options => {options.AllowAnyOrigin();}); 移动到 app.UseRouting() 之后和 app.UseAuthorization()

之前

正确的配置方法如下所示:

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

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseCors(options => {
            options.AllowAnyOrigin();
        });

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

    }

UseCors 必须按正确的顺序调用。它必须放在 UseRouting 之后,UseAuthorization 之前。您可以参考this文档。

并不是每个中间件都需要按照这个确切的顺序进行,但很多都需要。例如: UseCorsUseAuthenticationUseAuthorization 必须按所示顺序排列。 由于 this 错误,UseCors 目前必须在 UseResponseCaching 之前。