Beispiel #1
0
        public async Task <ResultModel <string> > CreateRoute(RoutesEditDto dto)
        {
            var routeJson = new StringContent(JsonConvert.SerializeObject(dto), Encoding.UTF8, "application/json");
            var response  = await _httpClient.PostAsync($"api/Ocelot/CreateRoute", routeJson);

            if (response.IsSuccessStatusCode)
            {
                return(JsonConvert.DeserializeObject <ResultModel <string> >(await response.Content.ReadAsStringAsync()));
            }
            return(null);
        }
Beispiel #2
0
        public async Task <ResultModel> CreateRoute(RoutesEditDto dto)
        {
            if (string.IsNullOrWhiteSpace(dto.DownstreamPathTemplate))
            {
                return(new ResultModel(ResultCode.Fail, "请输入下游路径模板"));
            }
            if (string.IsNullOrWhiteSpace(dto.DownstreamScheme))
            {
                return(new ResultModel(ResultCode.Fail, "请输入下游HTTP协议"));
            }
            if (string.IsNullOrWhiteSpace(dto.UpstreamPathTemplate))
            {
                return(new ResultModel(ResultCode.Fail, "请输入上游路径模板"));
            }
            var model = new Routes();

            model.Id = Guid.NewGuid();
            model.OcelotConfigGuid       = dto.OcelotConfigGuid;
            model.DownstreamPathTemplate = dto.DownstreamPathTemplate;
            model.DownstreamScheme       = dto.DownstreamScheme;
            model.UpstreamPathTemplate   = dto.UpstreamPathTemplate;
            model.RouteIsCaseSensitive   = dto.RouteIsCaseSensitive;
            model.LoadBalancerOption     = new LoadBalancerOption
            {
                Id         = Guid.NewGuid(),
                Type       = dto.LoadBalancerOption.Type,
                RoutesGuid = model.Id
            };

            if (!string.IsNullOrWhiteSpace(dto.AuthenticationOptions.AuthenticationProviderKey))
            {
                model.AuthenticationOptions = new AuthenticationOptions
                {
                    Id = Guid.NewGuid(),
                    AuthenticationProviderKey = dto.AuthenticationOptions.AuthenticationProviderKey,
                    RoutesGuid = model.Id
                };
            }
            dto.DownstreamHostAndPorts.ForEach(x =>
            {
                model.DownstreamHostAndPorts.Add(new DownstreamHostAndPorts
                {
                    Id         = new Guid(),
                    Host       = x.Host,
                    Port       = x.Port,
                    RoutesGuid = model.Id
                });
            });
            dto.UpstreamHttpMethods.ForEach(x =>
            {
                model.UpstreamHttpMethods.Add(new UpstreamHttpMethods
                {
                    Id         = new Guid(),
                    Method     = x.Method,
                    RoutesGuid = model.Id
                });
            });
            try
            {
                _userDatabaseContext.Routes.Add(model);
                await _userDatabaseContext.SaveChangesAsync();

                return(new ResultModel(ResultCode.Success, "创建路由成功"));
            }
            catch (Exception ex)
            {
                return(new ResultModel(ResultCode.Fail, ex.Message));
            }
        }
Beispiel #3
0
        public async Task <ResultModel> UpdateRoute(RoutesEditDto dto)
        {
            if (string.IsNullOrWhiteSpace(dto.DownstreamPathTemplate))
            {
                return(new ResultModel(ResultCode.Fail, "请输入下游路径模板"));
            }
            if (string.IsNullOrWhiteSpace(dto.DownstreamScheme))
            {
                return(new ResultModel(ResultCode.Fail, "请输入下游HTTP协议"));
            }
            if (string.IsNullOrWhiteSpace(dto.UpstreamPathTemplate))
            {
                return(new ResultModel(ResultCode.Fail, "请输入上游路径模板"));
            }
            if (dto.DownstreamHostAndPorts == null || dto.DownstreamHostAndPorts.Count <= 0)
            {
                return(new ResultModel(ResultCode.Fail, "请填写至少一个下游地址"));
            }
            if (dto.UpstreamHttpMethods == null || dto.UpstreamHttpMethods.Count <= 0)
            {
                return(new ResultModel(ResultCode.Fail, "请填写至少一个上游HTTP方法"));
            }

            try
            {
                var routeModel = await _userDatabaseContext.Routes.Where(x => x.Id == dto.Id)
                                 .Include(x => x.AuthenticationOptions)
                                 .Include(x => x.DownstreamHostAndPorts)
                                 .Include(x => x.LoadBalancerOption)
                                 .Include(x => x.UpstreamHttpMethods)
                                 .FirstOrDefaultAsync();

                routeModel.DownstreamPathTemplate = dto.DownstreamPathTemplate;
                routeModel.DownstreamScheme       = dto.DownstreamScheme;
                routeModel.UpstreamPathTemplate   = dto.UpstreamPathTemplate;
                routeModel.RouteIsCaseSensitive   = dto.RouteIsCaseSensitive;

                routeModel.LoadBalancerOption     = null;
                routeModel.AuthenticationOptions  = null;
                routeModel.DownstreamHostAndPorts = null;
                routeModel.UpstreamHttpMethods    = null;

                var loadBalancerOption = new LoadBalancerOption
                {
                    Id         = new Guid(),
                    Type       = dto.LoadBalancerOption.Type,
                    RoutesGuid = routeModel.Id
                };
                routeModel.LoadBalancerOption = loadBalancerOption;
                if (!string.IsNullOrWhiteSpace(dto.AuthenticationOptions.AuthenticationProviderKey))
                {
                    routeModel.AuthenticationOptions = new AuthenticationOptions
                    {
                        AuthenticationProviderKey = dto.AuthenticationOptions.AuthenticationProviderKey,
                        RoutesGuid = routeModel.Id
                    };
                }

                var downstreamHostAndPorts = new List <DownstreamHostAndPorts> {
                };
                dto.DownstreamHostAndPorts.ForEach(x =>
                {
                    downstreamHostAndPorts.Add(new DownstreamHostAndPorts
                    {
                        Host = x.Host,
                        Port = x.Port
                    });
                });

                var upstreamHttpMethods = new List <UpstreamHttpMethods> {
                };
                dto.UpstreamHttpMethods.ForEach(x =>
                {
                    upstreamHttpMethods.Add(new UpstreamHttpMethods
                    {
                        Method     = x.Method,
                        RoutesGuid = routeModel.Id
                    });
                });

                routeModel.DownstreamHostAndPorts = downstreamHostAndPorts;
                routeModel.UpstreamHttpMethods    = upstreamHttpMethods;

                _userDatabaseContext.Routes.Update(routeModel);
                await _userDatabaseContext.SaveChangesAsync();

                return(new ResultModel(ResultCode.Success, "更新路由配置成功"));
            }
            catch (Exception ex)
            {
                return(new ResultModel(ResultCode.Fail, ex.Message));
            }
        }
 public async Task <IActionResult> CreateRoute([FromBody] RoutesEditDto dto)
 {
     return(Json(await _ocelotConfigService.CreateRoute(dto)));
 }