/// <summary>
 /// 是否支持RequestContent
 /// </summary>
 /// <param name="method"></param>
 /// <param name="requestMappingBaseAttribute"></param>
 /// <returns></returns>
 protected bool SupportRequestContent(MethodInfo method, RequestMappingBaseAttribute requestMappingBaseAttribute)
 {
     return
         (requestMappingBaseAttribute.IsHttpMethod(HttpMethod.Post) ||
          requestMappingBaseAttribute.IsHttpMethod(HttpMethod.Put) ||
          requestMappingBaseAttribute.IsHttpMethod(HttpMethod.Delete));
 }
Esempio n. 2
0
        /// <summary>
        /// 处理参数
        /// </summary>
        /// <param name="typeBuilder"></param>
        /// <param name="requestMapping"></param>
        /// <param name="iLGenerator"></param>
        /// <param name="method"></param>
        /// <param name="uri"></param>
        /// <returns></returns>
        protected List <EmitRequestContent> EmitParameter(TypeBuilder typeBuilder, RequestMappingBaseAttribute requestMapping, ILGenerator iLGenerator, MethodInfo method, LocalBuilder uri)
        {
            int index = 0;
            List <EmitRequestContent> emitRequestContents = new List <EmitRequestContent>();

            foreach (var parameterInfo in method.GetParameters())
            {
                index++;
                if (parameterInfo.GetCustomAttributes().Any(s => s is INotRequestParameter))
                {
                    continue;
                }
                if (typeof(IHttpRequestFileForm).IsAssignableFrom(parameterInfo.ParameterType))
                {
                    emitRequestContents.Add(new EmitRequestContent
                    {
                        MediaType        = Constants.MediaTypes.MULTIPART_FORMDATA,
                        Parameter        = parameterInfo,
                        SupportMultipart = false,
                        ParameterIndex   = index
                    });
                    continue;
                }
                if (typeof(IHttpRequestFile).IsAssignableFrom(parameterInfo.ParameterType))
                {
                    emitRequestContents.Add(new EmitRequestContent
                    {
                        MediaType        = Constants.MediaTypes.FORMDATA,
                        Parameter        = parameterInfo,
                        SupportMultipart = true,
                        ParameterIndex   = index
                    });
                    continue;
                }
                if (parameterInfo.IsDefined(typeof(RequestBodyAttribute)))
                {
                    emitRequestContents.Add(new EmitRequestContent
                    {
                        MediaType        = Constants.MediaTypes.APPLICATION_JSON,
                        Parameter        = parameterInfo,
                        SupportMultipart = false,
                        ParameterIndex   = index
                    });
                    continue;
                }
                if (parameterInfo.IsDefined(typeof(RequestFormAttribute)))
                {
                    emitRequestContents.Add(new EmitRequestContent
                    {
                        MediaType        = Constants.MediaTypes.APPLICATION_FORM_URLENCODED,
                        Parameter        = parameterInfo,
                        SupportMultipart = true,
                        ParameterIndex   = index
                    });
                    continue;
                }
                MethodInfo replaceValueMethod;
                string     name;
                if (parameterInfo.IsDefined(typeof(RequestParamAttribute)))
                {
                    //如果是 HttpGet , 拼接到url上
                    if (requestMapping.IsHttpMethod(HttpMethod.Get) || requestMapping.IsHttpMethod(HttpMethod.Head))
                    {
                        name = parameterInfo.GetCustomAttribute <RequestParamAttribute>().Name ?? parameterInfo.Name;
                        //replaceValueMethod = ReplaceRequestParamMethod;
                        replaceValueMethod = GetReplaceRequestQueryMethod(typeBuilder, parameterInfo.ParameterType);
                    }
                    else
                    {
                        emitRequestContents.Add(new EmitRequestContent
                        {
                            MediaType        = Constants.MediaTypes.APPLICATION_FORM_URLENCODED,
                            Parameter        = parameterInfo,
                            SupportMultipart = true,
                            ParameterIndex   = index
                        });
                        continue;
                    }
                }
                else if (parameterInfo.IsDefined(typeof(RequestQueryAttribute)))
                {
                    name = parameterInfo.Name;
                    //replaceValueMethod = ReplaceRequestQueryMethod;
                    replaceValueMethod = GetReplaceRequestQueryMethod(typeBuilder, parameterInfo.ParameterType);
                }
                else
                {
                    name = parameterInfo.IsDefined(typeof(PathVariableAttribute)) ? parameterInfo.GetCustomAttribute <PathVariableAttribute>().Name : parameterInfo.Name;
                    //replaceValueMethod = ReplacePathVariableMethod;
                    replaceValueMethod = GetReplacePathVariableMethod(typeBuilder, parameterInfo.ParameterType);
                }

                if (string.IsNullOrWhiteSpace(name))
                {
                    name = parameterInfo.Name;
                }


                iLGenerator.Emit(OpCodes.Ldarg_0);
                iLGenerator.Emit(OpCodes.Ldloc, uri);
                iLGenerator.Emit(OpCodes.Ldstr, name);
                iLGenerator.Emit(OpCodes.Ldarg_S, index);
                iLGenerator.Emit(OpCodes.Call, replaceValueMethod);
                iLGenerator.Emit(OpCodes.Stloc, uri);
            }
            return(emitRequestContents);
        }