NCF 如何设置接口跨域访问

简介

后端开发一定对跨域问题比较熟悉了,那么今天我们来聊一下NCF的跨域问题,有2种方案

一、直接在服务端的web服务器设置跨域,即IIS设置跨域问题(参考:https://blog.csdn.net/guzicheng1990/article/details/106253104/)

二、在后台代码中增加跨域设置,此种方法比较灵活(推荐)

今天重点讲解第二种方案

 

步骤

1.在Senparc.Web的Startup.cs中增加使用跨域

2.在建立的Xncf模块中增加中间件,并在中间件中加入启用跨域

3.在Xncf模块中增加跨域允许的内容

 

实施

1.在Senparc.Web的Startup.cs中增加使用跨域

1 app.UseCors();

2.在建立的Xncf模块中增加中间件,并在中间件中加入启用跨域

 1 using Microsoft.AspNetCore.Builder;
 2 using Microsoft.AspNetCore.Http;
 3 using Microsoft.Extensions.DependencyInjection;
 4 using Microsoft.Extensions.FileProviders;
 5 using Microsoft.Extensions.Options;
 6 using Senparc.Ncf.XncfBase;
 7 using Senparc.Xncf.Admin.Utils;
 8 using System;
 9 using System.IO;
10 
11 namespace Senparc.Xncf.Admin
12 {
13     public partial class Register : IXncfMiddleware
14     {
15         public IApplicationBuilder UseMiddleware(IApplicationBuilder app)
16         {
17             app.UseCors("cors");
18             app.UseRouting();
19 
20             //添加MVC模式支持
21             app.UseEndpoints(endpoints =>
22             {
23                 endpoints.MapControllerRoute(
24                     name: "default",
25                     pattern: "{controller=Home}/{action=Index}/{id?}");
26                 });
27                 return app;
28             }
29     }
30     }

3.在Xncf模块中增加跨域允许的内容

 1         public void AddXncfDatabaseModule(IServiceCollection services)
 2         {
 3             //DOT REMOVE OR MODIFY THIS LINE 请勿移除或修改本行 - Entities Point
 4             //ex. services.AddScoped(typeof(Color));
 5             //跨域,这里可以自定义跨域的数组
 6             var domains = FileServerConfiguration.GetSection("Cors:Domain").Get<string[]>();
 7             var allowedOrigins = new HashSet<string>(domains, StringComparer.OrdinalIgnoreCase);
 8             //跨域默认策略
 9             services.AddCors(options => options.AddDefaultPolicy(builder =>
10             {
11                 builder.AllowAnyOrigin();
12                 builder.SetIsOriginAllowed(origin => allowedOrigins.Contains(new Uri(origin).Host));
13             }));
14             //跨域自定义策略cors
15             services.AddCors(p => p.AddPolicy("cors", 
16                 policy => policy.WithOrigins(domains).AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin())
17             );
18         }    

 

结语

 NCF仓库地址:https://github.com/NeuCharFramework/NCF (欢迎Star)

 按照上面的方法可以解决NCF跨域的难题,欢迎大家交流,欢迎Star,欢迎关注

posted @ 2021-05-15 09:44  MartyZane  阅读(313)  评论(0编辑  收藏  举报