Пример #1
0
        public Task ExecuteAsync(ActionContext context, XmlResult result)
        {
            var serializerSettings = result.XmlSerializerSettings ?? FormattingUtilities.GetDefaultXmlWriterSettings();
            TextOutputFormatter formatter;

            // create the proper formatter
            formatter = new XmlDataContractSerializerOutputFormatter(serializerSettings);
            XmlResultExecutorBase xmlBase = new XmlResultExecutorBase(WriterFactory, LoggerFactory, formatter);

            return(xmlBase.ExecuteAsync(context, result));
        }
Пример #2
0
        /// <summary>
        /// Executes the <see cref="XmlResult"/> and writes the response.
        /// </summary>
        /// <param name="context">The <see cref="ActionContext"/>.</param>
        /// <param name="result">The <see cref="XmlResult"/>.</param>
        /// <returns>A <see cref="Task"/> which will complete when writing has completed.</returns>
        public Task ExecuteAsync(ActionContext context, XmlResult result)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

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

            var response = context.HttpContext.Response;

            string   resolvedContentType         = null;
            Encoding resolvedContentTypeEncoding = null;

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

            response.ContentType = resolvedContentType;

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

            var serializerSettings = result.XmlSerializerSettings ?? FormattingUtilities.GetDefaultXmlWriterSettings();



            var outputFormatterWriterContext = new OutputFormatterWriteContext(
                context.HttpContext,
                WriterFactory.CreateWriter,
                result.Value.GetType(), result.Value);

            outputFormatterWriterContext.ContentType = new StringSegment(resolvedContentType);

            //  Logger formatter and value of object

            Logger.FormatterSelected(OutputFormatter, outputFormatterWriterContext);
            Logger.XmlResultExecuting(result.Value);

            return(OutputFormatter.WriteAsync(outputFormatterWriterContext));
        }
Пример #3
0
        public async Task ExecuteAsync_XmlExecutorContent()
        {
            // Arrange
            var value             = new PurchaseOrder();
            var xmlWriterSettings = FormattingUtilities.GetDefaultXmlWriterSettings();

            xmlWriterSettings.CloseOutput = false;
            var textw         = new StringWriter();
            var writer        = XmlWriter.Create(textw, xmlWriterSettings);
            var xmlSerializer = new XmlSerializer(value.GetType());

            xmlSerializer.Serialize(writer, value);
            var expected = Encoding.UTF8.GetBytes(textw.ToString());
            var context  = GetActionContext();

            CreateServices(context.HttpContext);

            var services = context.HttpContext.RequestServices;
            IXmlResultExecutor executor = null;

            executor = services.GetService <XmlResultExecutor>();
            var result = new XmlResult(value);

            // Act
            await executor.ExecuteAsync(context, result);

            // Assert
            var written = GetWrittenBytes(context.HttpContext);

            var s1 = Encoding.UTF8.GetString(expected);
            var s2 = Encoding.UTF8.GetString(written);

            Assert.Equal(expected, written);
            Assert.Equal(s1, s2);
            Assert.Equal("application/xml; charset=utf-8", context.HttpContext.Response.ContentType);
        }