コード例 #1
0
 private static object[] CreateParamsArray(JsonRpcRequest request, FastMethodInfo method)
 {
     try
     {
         return(CreateParams(request, method));
     }
     catch (Exception e)
     {
         var errorResponse = JsonRpcErrors.InvalidParams(request.Id, e.Message);
         throw new JsonRpcErrorException(errorResponse, e);
     }
 }
コード例 #2
0
        private static object[] CreateParams(JsonRpcRequest request, FastMethodInfo methodInfo)
        {
            var parameters = methodInfo.Parameters;

            switch (request.Params)
            {
            case JArray jArray:
            {
                if (jArray.Count != parameters.Length)
                {
                    throw new InvalidOperationException($"Invalid number of params, " +
                                                        $"expected {parameters.Length}, got {jArray.Count}\r\n" +
                                                        $"Expected parameters: [{string.Join(",", parameters.Select(p => p.Name))}]");
                }
                var result = new object[jArray.Count];
                for (var i = 0; i < result.Length; i++)
                {
                    result[i] = jArray[i].ToObject(parameters[i].ParameterType);
                }

                return(result);
            }

            case JObject jObject:
            {
                if (TryGetNamedParams(jObject, parameters, out var namedParameters))
                {
                    return(namedParameters);
                }

                // Handles the case where a single object (with its properties) is received as parameter (neither in an array nor as named args)
                var value = jObject.ToObject(parameters[0].ParameterType);
                return(new[] { value });
            }

            default:
            {
                // Handles the case where a single parameter is received (neither in an array nor as named args)
                var jArray = request.Params == null ? new JArray() : new JArray {
                    request.Params
                };
                return(CreateParams(new JsonRpcRequest
                    {
                        Id = request.Id,
                        Method = request.Method,
                        Params = jArray
                    }, methodInfo));
            }
            }
        }
コード例 #3
0
 public MethodInfoWithPermissions(FastMethodInfo methodInfo, string roles, string users)
 {
     MethodInfo = methodInfo;
     Roles      = roles;
     Users      = users;
 }