public Response <GrpcRequest> BuildRequest(DownstreamContext context)
        {
            var route = context.DownstreamRequest.AbsolutePath.Trim('/').Split('/');

            if (route.Length != 2)
            {
                return(SetError($"error request:{route},must do like this:http://domain:port/grpc/ServiceName/MethordName/"));
            }
            string svcName    = route[0].ToUpper();
            string methodName = route[1].ToUpper();
            //判断是否存在对应grpc服务、方法
            var grpcDescript = grpcServiceDescriptor.GetGrpcDescript();

            if (!grpcDescript.ContainsKey(svcName))
            {
                return(SetError($"service name is not defined.{svcName}"));
            }
            if (!grpcDescript[svcName].ContainsKey(methodName))
            {
                return(SetError($"method name is not defined.{methodName}"));
            }
            GrpcRequest grpcRequest = new GrpcRequest
            {
                GrpcMethod = grpcDescript[svcName][methodName]
            };

            try
            {
                //需要替换Scheme
                context.DownstreamRequest.Scheme = "http";
                var requestMessage = context.DownstreamRequest.ToHttpRequestMessage();
                var stream         = requestMessage.Content.ReadAsStreamAsync().Result;
                var encoding       = context.HttpContext.Request.GetTypedHeaders().ContentType?.Encoding ?? Encoding.UTF8;
                using (var reader = new StreamReader(stream, encoding))
                {
                    grpcRequest.RequestMessage = reader.ReadToEnd();
                }
                //兼容请求参数为空
                if (string.IsNullOrEmpty(grpcRequest.RequestMessage))
                {
                    grpcRequest.RequestMessage = "{}";
                }
            }
            catch (Exception)
            {
                return(SetError("request parameter error"));
            }
            context.DownstreamRequest.Scheme = "grpc";
            return(new OkResponse <GrpcRequest>(grpcRequest));
        }
        public Response <GrpcRequest> BuildRequest(DownstreamContext context)
        {
            var route = context.DownstreamRequest.AbsolutePath.Trim('/').Split('/');

            if (route.Length != 2)
            {
                return(SetError($"error request:{route},must do like this:http://domain:port/grpc/ServiceName/MethordName/"));
            }
            string svcName    = route[0].ToUpper();
            string methodName = route[1].ToUpper();
            //判断是否存在对应grpc服务、方法
            var grpcDescript = descriptor.Descriptor;

            if (!grpcDescript.ContainsKey(svcName))
            {
                return(SetError($"service name is not defined.{svcName}"));
            }
            if (!grpcDescript[svcName].ContainsKey(methodName))
            {
                return(SetError($"method name is not defined.{methodName}"));
            }
            GrpcRequest grpcRequest = new GrpcRequest
            {
                GrpcMethod = grpcDescript[svcName][methodName],
                Headers    = GetRequestHeaders(context)
            };

            try
            {
                //需要替换Scheme
                context.DownstreamRequest.Scheme = "http";
                var requestJson = GetRequestJson(context);
                grpcRequest.RequestMessage = JsonConvert.DeserializeObject(requestJson, grpcRequest.GrpcMethod.InputType.ClrType);
            }
            catch (Exception)
            {
                return(SetError("request parameter error"));
            }
            context.DownstreamRequest.Scheme = "grpc";
            return(new OkResponse <GrpcRequest>(grpcRequest));
        }