/// <summary> /// 获取所有参数的描述信息 /// </summary> /// <param name="actionDescriptor"></param> /// <returns></returns> public static IEnumerable <ParameterDisplay> Parameters(this MethodDescriptor actionDescriptor) { var pas = actionDescriptor.Method.GetCustomAttributes <ParameterDisplayAttribute>(); return(actionDescriptor.Method.GetParameters() .Select(t => { if (!pas.Any(p => p.Name == t.Name)) { return new ParameterDisplay() { name = t.Name, type = t.ParameterType.Name, required = !t.IsOptional } } ; var arribute = pas.FirstOrDefault(p => p.Name == t.Name); var propertys = new ParameterDisplay[] { }; if (t.ParameterType.IsArray) { propertys = t.ParameterType.GetElementType().GetProperties() .Select(filed => { var p = filed.GetCustomAttribute <ParameterDisplayAttribute>(true); if (p == null) { return new ParameterDisplay() { name = filed.Name, type = filed.PropertyType.Name } } ; return new ParameterDisplay() { name = p.Name, type = p.Type, required = p.Required, @default = p.Default, display = p.Display }; }).ToArray(); } return new ParameterDisplay() { name = arribute.Name, type = arribute.Type, required = arribute.Required, @default = arribute.Default, display = arribute.Display, Propertys = propertys }; })); }
/// <summary> /// 返回值描述 /// </summary> /// <param name="actionDescriptor"></param> /// <returns></returns> public static ParameterDisplay ResultParameters(this MethodDescriptor actionDescriptor) { var returnType = actionDescriptor.Method.ReturnType; var display = returnType.GetCustomAttribute <ParameterDisplayAttribute>(); if (display == null) { display = new ParameterDisplayAttribute() { Name = actionDescriptor.Method.ReturnParameter.Name, Type = actionDescriptor.Method.ReturnType.Name } } ; var returnParameter = new ParameterDisplay() { name = display.Name, @default = display.Default, display = display.Display, required = display.Required, type = display.Type }; if (returnType.IsPrimitive || returnType.ReflectedType == typeof(string) || returnType.IsEnum) { return(returnParameter); } var properties = returnType.GetProperties(); if (returnType.IsGenericType) { properties = returnType.GetGenericArguments()[0]?.GetProperties(); } if (returnType.IsArray) { properties = returnType.GetElementType().GetProperties(); } if (returnType == typeof(Task)) { return(returnParameter); } returnParameter.Propertys = properties.Select(filed => { var p = filed.GetCustomAttribute <ParameterDisplayAttribute>(true); if (p == null) { return new ParameterDisplay() { name = filed.Name, type = filed.PropertyType.Name } } ; return(new ParameterDisplay() { name = p.Name, type = p.Type, required = p.Required, @default = p.Default, display = p.Display }); }); return(returnParameter); }