/// <summary> /// 获取http代理启动参数 /// </summary> /// <returns>http代理参数</returns> private ProxyOptionGroup GetProxyOption() { ProxyOptionGroup pGroup = new ProxyOptionGroup(); pGroup.Options = new List <ProxyOptions>(); if (SysConfig.MicroServiceOption.Proxy == null) { SysConfig.MicroServiceOption.Proxy = new List <ProxyOption>(); } pGroup.Options.Add(new ProxyOptions { Uri = new Uri($"http://{MicroServiceConfig.ImsHost}"), MatchReg = new Regex("/api") }); pGroup.Options.Add(new ProxyOptions { Uri = new Uri(SysConfig.MicroServiceOption.Cloud.RegistCenterUri), MatchReg = new Regex("/map/scene") }); foreach (var item in SysConfig.MicroServiceOption.Proxy) { pGroup.Options.Add(new ProxyOptions { Uri = new Uri(item.ProxyPass), MatchReg = new Regex(item.UrlReg), Excludes = item.Excludes == null ? null : item.Excludes.ToList() }); } pGroup.Excludes = new List <string> { $"/api/{SysConfig.MicroServiceOption.Application.Name}/", "/api/Common/ConfigOptions", "/api/Common/Excel" }; return(pGroup); }
/// <summary> /// Runs proxy forwarding requests to the server specified by options. /// </summary> /// <param name="app"></param> /// <param name="options">Mutil Proxy options</param> public static void RunProxy(this IApplicationBuilder app, ProxyOptionGroup options) { if (app == null) { throw new ArgumentNullException(nameof(app)); } if (options == null || options.Options == null || options.Options.Count == 0) { throw new ArgumentNullException(nameof(options)); } app.UseMiddleware <ProxyMiddleware>(Options.Create(options)); }
public ProxyMiddleware(RequestDelegate next, IOptions <ProxyOptionGroup> options, ILoggerFactory loggerFactory) { _next = next ?? throw new ArgumentNullException(nameof(next)); _options = options.Value; _logger = loggerFactory.CreateLogger <ProxyMiddleware>(); }