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); }
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)); } }
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))); }