private object ConvertDataForResource(object value, SpParamInfo param, SpParamInfoEx paramEx, ApiInvokeOptions invokeOptions)
        {
            //fix UserString
            if (value is string valueString)
            {
                value = StringHelper.FixUserString(valueString);
            }

            if (param.SystemTypeName.ToLower() == "uniqueidentifier")
            {
                return(Guid.Parse(value as string));
            }

            if (value is JToken || value is System.Collections.ICollection) //string is an IEnumerable
            {
                if (UseCamelCase)
                {
                    Util.PascalizeJToken(value as JToken);
                }

                value = JsonConvert.SerializeObject(value);
            }

            return(value);
        }
        private SpParamInfo ProcInfo_GetParamInfo(ParameterInfo paramInfo, Dictionary <string, SpParamInfoEx> paramsEx)
        {
            var isRetParam = paramInfo.Position == -1;

            var spParamInfo = new SpParamInfo
            {
                ParamName      = isRetParam ? "returnValue" : paramInfo.Name,
                IsOutput       = paramInfo.IsOut || paramInfo.IsRetval || isRetParam,
                IsOptional     = paramInfo.IsOptional,
                DefaultValue   = paramInfo.DefaultValue,
                UserTypeName   = paramInfo.ParameterType.Name,
                SystemTypeName = paramInfo.ParameterType.Name
            };

            //extended paramInfo
            var paramAttribute = paramInfo.GetCustomAttribute <DirectSpParamAttribute>() ?? new DirectSpParamAttribute();
            var spParamInfoEx  = new SpParamInfoEx()
            {
                SignType = paramAttribute.SignType
            };

            paramsEx[spParamInfo.ParamName] = spParamInfoEx;

            return(spParamInfo);
        }
        private object CheckJwt(object paramValue, SpParamInfo spParam, SpParamInfoEx spParamEx)
        {
            // Sign text if need to sign
            if (spParamEx?.SignType == SpSignType.JwtByCertThumb && !spParam.IsOutput)
            {
                string token = paramValue.ToString();
                if (string.IsNullOrEmpty(token))
                {
                    return(string.Empty);
                }

                if (!_tokenSigner.CheckSign(token))
                {
                    throw new SpInvalidParamSignatureException(spParam.ParamName);
                }

                // Set param value by token payload
                return(StringHelper.FromBase64(token.Split('.')[1]));
            }

            return(paramValue);
        }