.net core实现前后端彻底分离

问题的关键在跨域

1.我们在services里面 添加跨域内容如下:

public void ConfigureServices(IServiceCollection services)
        {
            //这个AddOcelot方法是Ocelot包给IServiceCollection扩展的方法
            services.AddOcelot(configuration).AddConsul();
            #region CORS
            services.AddCors(c =>
            {
                //↓↓↓↓↓↓↓注意正式环境不要使用这种全开放的处理↓↓↓↓↓↓↓↓↓↓
                c.AddPolicy("AllRequests", policy =>
                {
                    policy
                    .AllowAnyOrigin()//允许任何源
                    .AllowAnyMethod()//允许任何方式
                    .AllowAnyHeader()//允许任何头
                    .AllowCredentials();//允许cookie
                });
                //↑↑↑↑↑↑↑注意正式环境不要使用这种全开放的处理↑↑↑↑↑↑↑↑↑↑


                //一般采用这种方法
                c.AddPolicy("LimitRequests", policy =>
                {
                    policy
                    .WithOrigins("http://localhost:8020", "http://blog.core.xxx.com", "")//支持多个域名端口
                    .WithMethods("GET", "POST", "PUT", "DELETE")//请求方法添加到策略
                    .WithHeaders("authorization");//标头添加到策略
                });

            });
            #endregion
        }

2.在中间件中添加跨域内容

 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            #region 跨域相关
            app.UseCors("AllRequests");
            #endregion
            //app.Run(async (context) =>
            //{
            //    await context.Response.WriteAsync("Hello World!");
            //});
            app.UseOcelot().Wait();
        }

注意如果项目没有用ocelot 直接是请求webapi  我们上述内容写在webapi的startup文件中

如果项目使用了ocelot 那么我们的上述内容只需要写在ocelot项目中

3.跨域请求 get没什么问题 但是post要注意:

post请求传递参数要有如下代码:

一个完整的例子:

<html>

    <head>
        <meta charset="utf-8" />
        <title>请求</title>
        <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
        <script type="text/javascript">
            $.ajax({
                type: "post",
                url: "https://www.xxx.net/xxxService/Category/AddCategory",
                data: JSON.stringify({
                    "CategoryName": "类别",
                    "Code": 4
                }),
                contentType:"application/json",
                                                   
                success: function(data) {
                    console.log(data);
                },
                error: function() {
                    console.log("请求错误")
                }
            });
        </script>
    </head>

    <body>

    </body>

</html>

done!

 

posted @ 2018-09-14 17:48  当年在远方  阅读(3165)  评论(0编辑  收藏  举报