/// <summary> /// 从配置文件中读取信息,并转换为路由上下文 /// </summary> /// <param name="routeContext"></param> /// <returns></returns> public static RouteContext Convert(DownstreamContext routeContext) { FileConfiguration fileConfiguration = InternalConfigurationHelper.Instance().GetConfiguration(); string upstreamUri = routeContext.UpstreamUri; var configRoutes = fileConfiguration.Routes; if (configRoutes == null || configRoutes.Count == 0) { routeContext = null; return(routeContext); } //从配置文件里面查找进行 var configRoute = configRoutes.FirstOrDefault(x => x.UpstreamHost + x.UpstreamPathTemplate == upstreamUri); if (configRoute == null) { routeContext = null; return(routeContext); } Copy(routeContext, configRoute); return(routeContext); }
/// <summary> /// 初始化路由信息 /// </summary> /// <param name="context"></param> private void MapDownstreamContextAsync(DownstreamContext context) { //1初始化配置文件 context.Configuration = InternalConfigurationHelper.Instance().GetConfiguration(); //2初始化下游请求对象 DownstreamRequestMapper requestMapper = new DownstreamRequestMapper(context.HttpContext.Request); var downstreamRequest = requestMapper.Create(); //如果有错误,把错误信息加载到context if (requestMapper.IsError) { SetPipelineError(context, requestMapper.GetError()); return; } context.DownstreamRequest = downstreamRequest; //3查找下游请求路由 DownstreamRouteFinder downstreamRouteFinder = new DownstreamRouteFinder(); var downstreamRoute = downstreamRouteFinder.Get(context); if (downstreamRouteFinder.IsError) { SetPipelineError(context, downstreamRouteFinder.GetError()); return; } context.DownstreamRoute = downstreamRoute; //4下游请求改写 ResetDownsteamRequest(context); }
/// <summary> /// 配置文件的初始化话 /// </summary> /// <param name="builder"></param> private static void InitConfiguration(IApplicationBuilder builder) { var routeConfig = builder.ApplicationServices.GetService <IOptions <FileConfiguration> >(); if (routeConfig.Value == null) { throw new Exception("无法读取配置文件"); } InternalConfigurationHelper.Instance(routeConfig.Value); }