Ejemplo n.º 1
0
        public async Task ExecuteAsync(ActionContext context, DeliverResult deliverResult, IComponent Component)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (deliverResult == null)
            {
                throw new ArgumentNullException(nameof(deliverResult));
            }

            var response = context.HttpContext.Response;

            ResponseContentTypeHelper.ResolveContentTypeAndEncoding(
                DefaultContentType,
                response.ContentType,
                DefaultContentType,
                out var resolvedContentType,
                out var resolvedContentTypeEncoding);

            response.ContentType = resolvedContentType;

            if (deliverResult.StatusCode != null)
            {
                response.StatusCode = deliverResult.StatusCode.Value;
            }

            var serializerSettings = deliverResult.SerializerSettings ?? _options.SerializerSettings;


            DeliverResultExecuting(_logger, deliverResult.Model);

            deliverResult.JsonModel = Component.Render(deliverResult.Model);

            using (var writer = _writerFactory.CreateWriter(response.Body, resolvedContentTypeEncoding))
            {
                using (var jsonWriter = new JsonTextWriter(writer))
                {
                    jsonWriter.ArrayPool           = _charPool;
                    jsonWriter.CloseOutput         = false;
                    jsonWriter.AutoCompleteOnClose = false;

                    var jsonSerializer = JsonSerializer.Create(serializerSettings);
                    jsonSerializer.Serialize(jsonWriter, deliverResult.JsonModel);
                }

                // Perf: call FlushAsync to call WriteAsync on the stream with any content left in the TextWriter's
                // buffers. This is better than just letting dispose handle it (which would result in a synchronous write).
                await writer.FlushAsync();
            }
        }
Ejemplo n.º 2
0
 public override void ReadBytes(byte[] byts)
 {
     MyHead = CMPPMsgHeader.Read(byts);
     Msg_Id = ReverseByteOrder.ReverseBytes(BitConverter.ToUInt64(byts, 12));
     Result = (DeliverResult)ReverseByteOrder.ReverseBytes(BitConverter.ToUInt32(byts, 20));
 }