Esempio n. 1
0
        internal object ExecuteRoute(ServiceRoute route, HttpRequest request)
        {
            if (!_methods.Any())
            {
                return(null);
            }

            var method = _methods.FirstOrDefault(m =>
            {
                var attribute = m.GetCustomAttribute <RouteAttribute>(true);

                if (attribute == null)
                {
                    return(false);
                }

                if (request.Params.Any())
                {
                    return(attribute.Method == route.Method && attribute.RoutePath == route.RoutePath &&
                           m.GetParameters().Length > 0);
                }
                else
                {
                    return(attribute.Method == route.Method && attribute.RoutePath == route.RoutePath);
                }
            });

            if (method == null)
            {
                return(null);
            }

            //方法的参数集合
            var parameterInfos = method.GetParameters();

            //解析后的参数集合
            var list = new List <object>();

            if (parameterInfos.Any() && request.Params.Any())
            {
                switch (request.Method)
                {
                case "GET":
                    ResolveGet(parameterInfos, request, list);
                    break;

                case "POST":
                    ResolvePost(parameterInfos, request, list);
                    break;
                }
            }

            try
            {
                if (parameterInfos.Length != list.Count)
                {
                    return(JsonError("参数获取失败"));
                }

                return(method.Invoke(this, list.ToArray()));
            }
            catch (Exception e)
            {
                return(JsonError(e.Message));
            }
        }