后端开发一定对跨域问题比较熟悉了,那么今天我们来聊一下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,欢迎关注