前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dotnet core 之 CORS使用示例

dotnet core 之 CORS使用示例

作者头像
Vincent-yuan
发布2019-09-10 18:14:23
4380
发布2019-09-10 18:14:23
举报
文章被收录于专栏:Vincent-yuanVincent-yuanVincent-yuan

这里列举几个经过验证的可用的CORS使用示例,

方便在需要的时候可以直接使用

示例1

#region snippet2
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                builder =>
                {
                    //1.可用
                    //builder.WithOrigins("http://example.com",
                    //                    "http://www.contoso.com",
                    //                    "http://localhost:65317");

                    builder.AllowAnyOrigin(); //2.可用

                });
            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
        #endregion

        #region snippet3
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseCors(MyAllowSpecificOrigins); 

            app.UseHttpsRedirection();
            app.UseMvc();
        }
        #endregion

这种比较常见,即在ConfigureServices中添加中间件及定义其策略;而在Configure中把中间件设置到管道中

示例2

public void ConfigureServices(IServiceCollection services)
        {
            //services.AddCors(); //经试验,此句加或者不加,都是可以的

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

        #region snippet2
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            // Shows UseCors with CorsPolicyBuilder.
            app.UseCors(builder =>
            {
                builder.WithOrigins("http://example.com",
                                    "http://www.contoso.com",
                                    "https://localhost:44375",
                                    "http://localhost:65317");
            });

            app.UseHttpsRedirection();
            app.UseMvc();
        }
        #endregion

注意,这个示例中,直接在Configure中的app.UseCors中设置的跨域的一些要求,这种写法经试验也是可以的

示例3

public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddDefaultPolicy(
                    builder =>
                    {
                       
                        builder.WithOrigins("http://example.com",
                                            "http://www.contoso.com", "http://localhost:65317");
                    });

                options.AddPolicy("AnotherPolicy",
                    builder =>
                    {
                        builder.WithOrigins("http://www.contoso.com", "http://localhost:65317")
                                            .AllowAnyHeader()
                                            .AllowAnyMethod();
                    });

            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

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

            app.UseHttpsRedirection();
            app.UseMvc();
        }

经试验发现,像这种没有在Configure中使用app.UseCors的,应该都属于局部设置跨域的,需要在相应的Controller或者Action方法上,使用注解:

 //[EnableCors("AnotherPolicy")]  //这种事有名称的策略的注解添加
    [EnableCors()]         //这种是模式策略的注解添加
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase

注意,即使是默认的策略也是需要使用注解进行声明的,否则会跨域错误。默认的策略只是说不用在注解中声明策略名而已

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档