Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        private RequestDataResolver GetDataResolver()
        {
            RequestDataResolver resolver = (RequestDataResolver)_svp.GetService(typeof(RequestDataResolver));

            return(resolver);
        }