Example #1
0
        public async Task UpdateLoadBalancerOption_ReturnsNotFoundStatusCode()
        {
            //Arrange
            var newUnit = new LoadBalancerOption {
                Type = "Test10", LoadBalancerOptionId = 80
            };
            var content = Utilities.GetRequestContent(newUnit);

            //Act
            var response =
                await _client.PutAsync(UriForTests.UpdateUri(ControllerNames.LoadBalancerOptions), content);

            //Assert
            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
        }
Example #2
0
        public async Task UpdateLoadBalancerOption_ReturnSuccessStatusCode()
        {
            //Arrange
            var newUnit = new LoadBalancerOption {
                Type = "Test10", LoadBalancerOptionId = 10
            };
            var content = Utilities.GetRequestContent(newUnit);

            //Act
            var response =
                await _client.PutAsync(UriForTests.UpdateUri(ControllerNames.LoadBalancerOptions), content);

            //Assert
            response.EnsureSuccessStatusCode();
        }
Example #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));
            }
        }