public async Task Invoke(HttpContext context) { Log.Info("url path = " + context.Request.Path); if (this.ReverseProxyConfig.excludePages.Contains(context.Request.Path.Value.ToLower()) || (!string.IsNullOrEmpty(this.ReverseProxyConfig.fixedPage) && !this.ReverseProxyConfig.fixedPage.Equals(context.Request.Path.Value, StringComparison.OrdinalIgnoreCase))) { await next.Invoke(context); return; } IGatawayResult result = null; var wrapper = GetResponseWrapper(); var reverseContext = GetProxyContext(context, this.ReverseProxyConfig); RequestDataResolver dataResolver = GetDataResolver(); if (dataResolver == null) { result = wrapper.Wrap(null, "0003", "网关配置错误"); await result.ExecuteAsync(context); return; } var rlvres = dataResolver.Resolve(reverseContext); if (!rlvres.Success) { result = wrapper.Wrap(null, rlvres.StatusCode.ToString().PadLeft(4, '0'), rlvres.Message); await result.ExecuteAsync(context); return; } wrapper.Merchant = reverseContext.Merchant = rlvres.Content.GetMerchant(); var validateCollection = this.GetValidateCollection(); if (validateCollection != null && validateCollection.Count() > 0) { foreach (var validateObject in validateCollection) { var validRes = validateObject.Validate(reverseContext); if (!validRes.Success) { result = wrapper.Wrap(null, validRes.StatusCode.ToString().PadLeft(4, '0'), validRes.Message); await result.ExecuteAsync(context); return; } } } ReverseProxyServiceMapping serviceMapping = new ReverseProxyServiceMapping(); if (!serviceMapping.Resolve(reverseContext)) { result = wrapper.Wrap(null, "0400", "服务不存在"); await result.ExecuteAsync(context); return; } if (!SendProxyRequest(reverseContext, out string response)) { result = wrapper.Wrap(null, "0503", $"系统错误[{response}]"); await result.ExecuteAsync(context); return; } result = wrapper.Wrap(response, null, null); await result.ExecuteAsync(context); }
private RequestDataResolver GetDataResolver() { RequestDataResolver resolver = (RequestDataResolver)_svp.GetService(typeof(RequestDataResolver)); return(resolver); }