/// <summary>
        /// 初始化一个<see cref="AuthorizationResult"/>类型的实例
        /// </summary>
        /// <param name="raw">授权接口返回的原始消息</param>
        /// <param name="success">是否成功</param>
        /// <param name="type">参数解析器类型</param>
        public AuthorizationResult(string raw, Func <AuthorizationResult, bool> success,
                                   ParameterParserType type = ParameterParserType.Json)
        {
            Raw = raw;
            IParameterParserFactory factory = new ParameterParserFactory();

            _parser = factory.CreateParameterParser(type);
            _parser.LoadData(raw);
            Success = success(this);
        }
Exemplo n.º 2
0
        public ApiAction(MethodInfo method)
        {
            if (method == null)
            {
                throw new ArgumentNullException(nameof(method));
            }
            if (!method.IsPublic)
            {
                throw new ArgumentOutOfRangeException(nameof(method), "方法必须为public类型");
            }
            if (method.IsGenericMethod)
            {
                throw new ArgumentException($"{method.Name}不能为泛型方法", nameof(method));
            }
            Method   = method;
            Name     = method.Name;
            Obsolete = method.GetCustomAttribute <ObsoleteAttribute>() ??
                       method.ReflectedType.GetCustomAttribute <ObsoleteAttribute>() ??
                       method.DeclaringType.GetCustomAttribute <ObsoleteAttribute>();
            var paras       = method.GetParameters();
            var parasLength = paras.Length;
            var parsers     = new IParameterParser[parasLength];

            for (var i = 0; i < parasLength; i++)
            {
                var p = paras[i];
                if (p.IsOut || p.ParameterType.IsByRef)
                {
                    throw new ArgumentException("不支持out或ref参数");
                }
                parsers[i] = ParameterParserFactory.Create(p);
                if (p.Attributes.HasFlag(ParameterAttributes.HasDefault) ||
                    p.HasDefaultValue)
                {
                    parsers[i].DefaultValue = p.RawDefaultValue;
                }
            }
            _parameterParsers = parsers;

            _parameterLength = _parameterParsers.Length;
        }