如何在ASP.NET Web API Core中全局启用CORS

6

我找到了这个网站:

https://learn.microsoft.com/en-us/aspnet/core/security/cors

然而,我对如何全局启用它感到困惑,因为似乎有两种方法可以实现,这两种方法有什么不同?还是说它们执行的是两个不同的任务?

public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            //https://learn.microsoft.com/en-us/aspnet/core/security/cors
            services.AddCors(options =>
            {
                options.AddPolicy("AllowSpecificOrigin",
                    builder => builder.WithOrigins("http://example.com")
                                        .AllowAnyHeader()
                    );
            });

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

            // Add framework services.
            services.AddMvc();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            app.UseCors("AllowSpecificOrigin");

            app.UseMvc();
        }

为了清晰起见,Luis能否将你的代码块拆分成两个部分? - ahsteele
为什么您标记了唯一的正确答案,然后又对其进行了悬赏 寻找可信和/或官方来源的答案。 - Jeremy Thompson
这是一个错误,但我不知道如何纠正它。我该如何取消悬赏? - Luis Valencia
1个回答

5

在ConfigureServices中的调用仅仅是添加 Cors 服务,而不是设置它(包括创建策略)。通过添加过滤器,您正在使其全局化,但我了解在 Configure 中使用 UseCors 是添加全局 CORS 的首选方法。过滤器代码所做的只是强制所有控制器上的属性,并且 UseCors 实际上做了相同的事情,只是在堆栈的不同部分。我相信 UseCors 将为更多的 MVC 调用进行设置,这就是它与其他方法的不同之处。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接