From 1c8582d77a136907f133eea9ec5e4a2c7ab1a158 Mon Sep 17 00:00:00 2001 From: Kiran Challa Date: Thu, 25 Sep 2014 17:26:07 -0700 Subject: [PATCH] [Fixes #1183] Response uses chunked encoding when returning a string --- .../Formatters/TextPlainFormatter.cs | 4 +++- .../Formatters/TextPlainFormatterTests.cs | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.AspNet.Mvc.Core/Formatters/TextPlainFormatter.cs b/src/Microsoft.AspNet.Mvc.Core/Formatters/TextPlainFormatter.cs index 1737347a48..59eae6273a 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Formatters/TextPlainFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Formatters/TextPlainFormatter.cs @@ -51,7 +51,9 @@ namespace Microsoft.AspNet.Mvc } var response = context.ActionContext.HttpContext.Response; - using (var writer = new StreamWriter(response.Body, context.SelectedEncoding, 1024, leaveOpen: true)) + + using (var delegatingStream = new DelegatingStream(response.Body)) + using (var writer = new StreamWriter(delegatingStream, context.SelectedEncoding, 1024, leaveOpen: true)) { await writer.WriteAsync(valueAsString); } diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Formatters/TextPlainFormatterTests.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Formatters/TextPlainFormatterTests.cs index 822a5141ba..ba0086aff7 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/Formatters/TextPlainFormatterTests.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/Formatters/TextPlainFormatterTests.cs @@ -54,22 +54,29 @@ namespace Microsoft.AspNet.Mvc public async Task WriteAsync_DoesNotWriteNullStrings() { // Arrange + Encoding encoding = Encoding.UTF8; + var memoryStream = new MemoryStream(); + var response = new Mock(); + response.SetupProperty(o => o.ContentLength); + response.SetupGet(r => r.Body).Returns(memoryStream); + var mockHttpContext = new Mock(); + mockHttpContext.Setup(o => o.Response).Returns(response.Object); + var formatter = new TextPlainFormatter(); var formatterContext = new OutputFormatterContext() { Object = null, - DeclaredType = typeof(string), + DeclaredType = typeof(string), + ActionContext = new ActionContext(mockHttpContext.Object, new RouteData(), new ActionDescriptor()), + SelectedEncoding = encoding }; - var tempMemoryStream = new MemoryStream(); - var mockHttpContext = new Mock(); - mockHttpContext.SetupGet(o => o.Response.Body) - .Returns(tempMemoryStream); // Act await formatter.WriteResponseBodyAsync(formatterContext); // Assert - Assert.Equal(0, tempMemoryStream.Length); + Assert.Equal(0, memoryStream.Length); + response.VerifySet(r => r.ContentLength = It.IsAny(), Times.Never()); } } }