Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
        /// <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));
        }