/// <summary>
        /// handle  method overlay
        /// </summary>
        /// <param name="list"></param>
        /// <param name="requestMetaData"></param>
        /// <param name="requestGroupMetaData"></param>
        private void setRequest(List <RpcRequestMetaData> list, RpcRequestMetaData requestMetaData, RpcServiceMetaData requestGroupMetaData)
        {
            for (int i = 0; i < list.Count; i++)
            {
                if (requestMetaData.Name == list[i].Name)
                {
                    requestMetaData.Name = requestMetaData.Name + i.ToString();

                    i = 0;
                }
            }

            if (requestMetaData.Path == null)
            {
                requestMetaData.Path = requestGroupMetaData.Path + "/" + requestMetaData.Name.ToLower();
            }
        }
        private RpcRequestMetaData resolveRequest(Method method, string groupPath)
        {
            var metaData = new RpcRequestMetaData();

            metaData.Method = method;

            foreach (var item in method.Attributes)
            {
                var attrType = item.GetType();

                if (attrType == typeof(PathAttribute))
                {
                    metaData.Path = ((PathAttribute)item[0]).Path;
                }
                else if (attrType == typeof(RpcIgnoreAttribute))
                {
                    return(null);
                }
                else if (attrType == typeof(BeforeInterceptorAttribute))
                {
                    foreach (var before in item)
                    {
                        metaData.BeforeInterceptors.Add(((BeforeInterceptorAttribute)before).Name);
                    }
                }
                else if (attrType == typeof(AfterInterceptorAttribute))
                {
                    foreach (var after in item)
                    {
                        metaData.BeforeInterceptors.Add(((AfterInterceptorAttribute)after).Name);
                    }
                }
                else if (attrType == typeof(AroundInterceptorAttribute))
                {
                    foreach (var around in item)
                    {
                        metaData.BeforeInterceptors.Add(((AroundInterceptorAttribute)around).Name);
                    }
                }
                else if (attrType == typeof(ErrorInterceptor))
                {
                    foreach (var error in item)
                    {
                        metaData.BeforeInterceptors.Add(((ErrorInterceptor)error).Name);
                    }
                }
                else if (attrType == typeof(SerializationModeAtribute))
                {
                    metaData.SerializeMode = ((SerializationModeAtribute)item[0]).SerializeMode;
                }
                else if (attrType == typeof(AliasAttribute))
                {
                    metaData.Name = ((AliasAttribute)item[0]).Alias;
                }
            }


            if (metaData.Name == null)
            {
                metaData.Name = method.Name;
            }

            if (metaData.Path == null)
            {
                metaData.Path = groupPath + "/" + metaData.Name.ToLower();
            }


            var ls = new List <RpcRequestParameterMetaData>();

            foreach (var item in method.Parameters)
            {
                var parameterMetaData = new RpcRequestParameterMetaData();

                parameterMetaData.RelatedType = item.ParameterType;

                var parameterFromSetted = false;

                foreach (var attr in item.Attributes)
                {
                    var attrType = item.GetType();

                    if (attrType == typeof(BodyAttribute))
                    {
                        parameterMetaData.FromBody = true;

                        parameterFromSetted = true;
                    }
                    else if (attrType == typeof(QueryStringAttribute))
                    {
                        parameterMetaData.QueryStringKey = ((QueryStringAttribute)attr[0]).Name;

                        parameterFromSetted = true;
                    }
                    else if (attrType == typeof(DataAttribute))
                    {
                        parameterMetaData.DataKey = ((DataAttribute)attr[0]).Name;
                    }
                    else if (attrType == typeof(DefaultValueAttribute))
                    {
                        parameterMetaData.DefaultValue = ((DefaultValueAttribute)attr[0]).Value;
                    }
                    else if (attrType == typeof(NotNullAttribute))
                    {
                        parameterMetaData.NotNull = true;
                    }
                    else if (attrType == typeof(DefaultImplementAttribute))
                    {
                        parameterMetaData.ImplType = ((DefaultImplementAttribute)attr[0]).Impl;
                    }
                }

                if (!parameterFromSetted)
                {
                    parameterMetaData.QueryStringKey = item.Name;
                }

                ls.Add(parameterMetaData);
            }

            metaData.Parameters = ls.ToArray();

            return(metaData);
        }