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)); }
/// <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)); }
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); }