/// <inheritdoc />
        public Task SerializeToResponse(RequestExecutionContext context)
        {
            if (context.Result is IActionResult actionResult)
            {
                return(_actionResultExecutor.Execute(context, actionResult));
            }

            if (context.Result != null &&
                context.ContentSerializer != null)
            {
                return(context.ContentSerializer.SerializeToResponse(context));
            }

            if (context.Result == null)
            {
                return(NullResult(context));
            }

            if (_serializer != null &&
                _serializer.IsDefault)
            {
                return(_serializer.SerializeToResponse(context));
            }

            return(NegotiateSerialization(context));
        }
Esempio n. 2
0
        /// <inheritdoc />
        public Task WriteRawContent(RequestExecutionContext requestContext, string contentType, string contentEncoding)
        {
            if (requestContext.Result is IActionResult actionResult)
            {
                return(_actionResultExecutor.Execute(requestContext, actionResult));
            }

            var response = requestContext.HttpContext.Response;

            response.StatusCode = requestContext.HttpStatusCode;

            response.ContentType = contentType;

            if (contentEncoding != null)
            {
                response.Headers.TryAdd("Content-Encoding", contentEncoding);
            }

            if (requestContext.Result is byte[] bytes)
            {
                return(ReturnByteArray(response, bytes));
            }

            if (requestContext.Result is string resultString)
            {
                return(ReturnByteArray(response, Encoding.UTF8.GetBytes(resultString)));
            }

            if (requestContext.Result is Stream stream)
            {
                return(stream.CopyToAsync(response.Body, requestContext.HttpContext.RequestAborted));
            }

            var returnBytes = Encoding.UTF8.GetBytes(requestContext.Result?.ToString() ?? "");

            return(ReturnByteArray(response, returnBytes));
        }