/// <summary> /// Entry point for HTTP requests /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task ProcessRequestAsync(HttpContext context) { var form = context.Request.Form; _userAccessor.User = context.User; _request.FilesFromClient = form.Files; var command = new NextApiCommand { Service = form["Service"].FirstOrDefault(), Method = form["Method"].FirstOrDefault() }; var argsString = form["Args"].FirstOrDefault(); command.Args = string.IsNullOrEmpty(argsString) ? null : JsonConvert.DeserializeObject <NextApiJsonArgument[]>(argsString, SerializationUtils.GetJsonConfig()) .Cast <INextApiArgument>() .ToArray(); var result = await _handler.ExecuteCommand(command); if (result is NextApiFileResponse fileResponse) { await context.Response.SendNextApiFileResponse(fileResponse); return; } await context.Response.SendJson(result); }
/// <summary> /// Entry point for HTTP requests /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task ProcessRequestAsync(HttpContext context) { var form = context.Request.Form; _userAccessor.User = context.User; _request.FilesFromClient = form.Files; var command = new NextApiCommand { Service = form["Service"].FirstOrDefault(), Method = form["Method"].FirstOrDefault() }; var serialization = form["Serialization"].FirstOrDefault(); var useMessagePack = serialization == SerializationType.MessagePack.ToString(); if (useMessagePack) { var argsFile = form.Files["Args"]; using var memoryStream = new MemoryStream(); await argsFile.CopyToAsync(memoryStream); var byteArray = memoryStream.ToArray(); var args = MessagePackSerializer.Typeless.Deserialize(byteArray); command.Args = (INextApiArgument[])args; } else { var argsString = form["Args"].FirstOrDefault(); command.Args = string.IsNullOrEmpty(argsString) ? null : JsonConvert.DeserializeObject <NextApiJsonArgument[]>(argsString, SerializationUtils.GetJsonConfig()) .Cast <INextApiArgument>() .ToArray(); } var result = await _handler.ExecuteCommand(command); if (result is NextApiFileResponse fileResponse) { await context.Response.SendNextApiFileResponse(fileResponse); return; } if (useMessagePack) { var resultByteArray = MessagePackSerializer.Typeless.Serialize(result); await context.Response.SendByteArray(resultByteArray); } else { await context.Response.SendJson(result); } }
/// <summary> /// Entry point of service calls /// </summary> /// <param name="command">Information about service call</param> /// <returns>Response from called service</returns> public async Task <dynamic> ExecuteCommand(NextApiCommand command) { // set current nextapi user _nextApiUserAccessor.User = Context.User; // set current request info _nextApiRequest.ClientContext = Context; _nextApiRequest.HubContext = _hubContext; var result = await _handler.ExecuteCommand(command); if (!(result is NextApiFileResponse)) { return(result); } var error = new NextApiError(NextApiErrorCode.OperationIsNotSupported.ToString(), new Dictionary <string, object>() { { "message", "File operations is not supported over SignalR, use HTTP" } }); return(new NextApiResponse(data: null, error: error, success: false)); }