public async Task <ResultModel> CreateConfig(OcelotConfigEditDto dto) { if (string.IsNullOrWhiteSpace(dto.GlobalConfiguration.BaseUrl)) { return(new ResultModel(ResultCode.Fail, "请输入网关地址")); } var globalConfiguration = new GlobalConfiguration { BaseUrl = dto.GlobalConfiguration.BaseUrl }; var ocelotConfig = new OcelotConfig { IsEnable = dto.IsEnable, GlobalConfiguration = globalConfiguration }; try { _userDatabaseContext.OcelotConfigs.Add(ocelotConfig); await _userDatabaseContext.SaveChangesAsync(); return(new ResultModel(ResultCode.Success, "创建网关配置成功")); } catch (Exception ex) { return(new ResultModel(ResultCode.Fail, ex.Message)); } }
public Task <Result> SetOcelotConfigAsync(OcelotConfig config) { try { string json = JsonSerializer.Serialize(config); using (var sw = new System.IO.StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "ocelot.json")) { sw.Write(json); } return(Task.FromResult(Result.Sucess())); } catch (Exception ex) { return(Task.FromResult(Result.Fail(ex.Message))); } }
public override bool Execute(NetCoreInput input) { var host = input.BuildHost(); var serviceType = typeof(IApiDescriptionGroupCollectionProvider); var ocelotBaseConfig = host.Services.GetService(typeof(IOcelotConfigBuilderConfiguration)) as IOcelotConfigBuilderConfiguration; if (!(host.Services.GetService(serviceType) is IApiDescriptionGroupCollectionProvider explorer)) { return(true); } var results = explorer .ApiDescriptionGroups .Items .SelectMany(x => x.Items); var grouped = results.GroupBy(r => r.RelativePath); var config = new OcelotConfig() { }; foreach (var group in grouped) { var ocelotRoutes = group.Select(x => x.ActionDescriptor.EndpointMetadata.Where(y => y.GetType() == typeof(OcelotRoute))).FirstOrDefault(); var ocelotRoute = GetRoute(ocelotRoutes, group.Key); if (ocelotRoute == null) { continue; } var claimsToHeaders = group.Select(x => x.ActionDescriptor.EndpointMetadata.Where(y => y.GetType() == typeof(OcelotClaimToHeaderAttribute))).FirstOrDefault(); var downStreamRoute = group.Key; var upstreamMethods = group.Select(x => x.HttpMethod).ToArray(); // var upstreamPath = upstreamUrl != null ? formatUrl(upstreamUrl.Url, ocelotBaseConfig.PrefixToRemove) : formatUrl(downStreamRoute, ocelotBaseConfig.PrefixToRemove); var route = new OcelotConfigRoute { DownstreamPathTemplate = formatUrl(downStreamRoute), DownstreamHostAndPorts = new List <OcelotConfigBuilderDownstreamHost> { ocelotBaseConfig.DownstreamHost }, UpstreamPathTemplate = formatUrl(ocelotRoute.OcelotTemplate), UpstreamHttpMethod = upstreamMethods, }; foreach (var claim in claimsToHeaders) { var castClaim = claim as OcelotClaimToHeaderAttribute; route.AddHeadersToRequest.Add(castClaim.HeaderName, $"Claims[{castClaim.Claim}]>{castClaim.ValuePath}".Trim()); } if (ocelotRoute.AuthenticationProvider != null && !string.IsNullOrWhiteSpace(ocelotRoute.AuthenticationProvider)) { route.AuthenticationOptions = new OcelotConfigRouteAuthOptions { AuthenticationProviderKey = ocelotRoute.AuthenticationProvider }; } config.Routes.Add(route); } if (!ocelotBaseConfig.GenerateGlobalConfiguration) { config.GlobalConfiguration = null; } else { config.GlobalConfiguration.BaseUrl = ocelotBaseConfig.BaseUrl; } var data = JsonConvert.SerializeObject(config, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented }); Console.WriteLine(data); var serializer = new SerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build(); var configmap = new Configmap { Metadata = new ConfigmapMetadata { Name = ocelotBaseConfig.Kubernetes.Name, Namespace = ocelotBaseConfig.Kubernetes.Namespace }, }; configmap.Data.Add("ocelot.api.json", data); var output = serializer.Serialize(configmap); File.WriteAllText(ocelotBaseConfig.OutputFileName, output); return(true); }