Example #1
0
        public static JObject GetControllerInfo(params Type[] controllerTypes)
        {
            var res = new JObject();

            foreach (var type in controllerTypes)
            {
                var routePrefix = type.GetCustomAttributes <RoutePrefixAttribute>().First().Prefix;
                var controller  = new JObject();
                foreach (var methodInfo in type.GetMethods())
                {
                    var verbs = GetMethods(methodInfo);
                    if (verbs.Length > 0)
                    {
                        var method = new JObject
                        {
                            { "Method", new JValue(verbs[0]) },
                            { "Route", new JValue($"{routePrefix}/{methodInfo.GetCustomAttributes<RouteAttribute>().First().Template}") }
                        };
                        var body       = new JObject();
                        var parameters = new JObject();
                        foreach (var parameterInfo in methodInfo.GetParameters())
                        {
                            if (parameterInfo.GetCustomAttributes <FromBodyAttribute>().FirstOrDefault() == null)
                            {
                                parameters.AddParameterInfo(parameterInfo);
                            }
                            else
                            {
                                body.AddParameterInfo(parameterInfo);
                            }
                        }
                        if (parameters.Count > 0)
                        {
                            method.Add("Params", parameters);
                        }
                        if (body.Count > 0)
                        {
                            method.Add("Body", body);
                        }
                        var resAttr = methodInfo.GetCustomAttributes <ResponseTypeAttribute>().FirstOrDefault();
                        if (resAttr != null)
                        {
                            var response = new JObject();
                            response.AddProperties(resAttr.ResponseType);
                            if (response.Count > 0)
                            {
                                method.Add("Response", response);
                            }
                        }


                        controller.Add(methodInfo.Name, method);
                    }
                }
                res.Add(Regex.Replace(type.Name, "Controller$", ""), controller);
            }

            return(res);
        }