欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

dotnet core 之 CORS使用示例

程序员文章站 2022-06-28 20:10:16
这里列举几个经过验证的可用的CORS使用示例, 方便在需要的时候可以直接使用 示例1 这种比较常见,即在ConfigureServices中添加中间件及定义其策略;而在Configure中把中间件设置到管道中 示例2 注意,这个示例中,直接在Configure中的app.UseCors中设置的跨域的 ......

 

这里列举几个经过验证的可用的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

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