コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }