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); } }
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)); } } }
public MethodInfoWithPermissions(FastMethodInfo methodInfo, string roles, string users) { MethodInfo = methodInfo; Roles = roles; Users = users; }