diff --git a/src/Microsoft.AspNet.Mvc.Core/ControllerActionInvoker.cs b/src/Microsoft.AspNet.Mvc.Core/ControllerActionInvoker.cs index 4a81008d94..274060f935 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ControllerActionInvoker.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ControllerActionInvoker.cs @@ -108,11 +108,7 @@ namespace Microsoft.AspNet.Mvc.Core if (declaredReturnType == typeof(void) || declaredReturnType == typeof(Task)) { - return new ObjectResult(null) - { - // Treat the declared type as void, which is the unwrapped type for Task. - DeclaredType = typeof(void) - }; + return new EmptyResult(); } // Unwrap potential Task types. diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/ControllerActionInvokerTest.cs b/test/Microsoft.AspNet.Mvc.Core.Test/ControllerActionInvokerTest.cs index c221e5bc76..72a8f4acd7 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/ControllerActionInvokerTest.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/ControllerActionInvokerTest.cs @@ -1920,17 +1920,13 @@ namespace Microsoft.AspNet.Mvc [Theory] [InlineData(typeof(void))] [InlineData(typeof(Task))] - public void CreateActionResult_Types_ReturnsObjectResultForTaskAndVoidReturnTypes(Type type) + public void CreateActionResult_Types_ReturnsEmptyResultForTaskAndVoidReturnTypes(Type type) { // Arrange & Act var result = ControllerActionInvoker.CreateActionResult(type, null); // Assert - var objectResult = Assert.IsType(result); - - // Since we unwrap the Task type to void, the expected type will always be void. - Assert.Equal(typeof(void), objectResult.DeclaredType); - Assert.Null(objectResult.Value); + Assert.IsType(result); } public static IEnumerable CreateActionResult_ReturnsObjectContentResultData diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/BasicTests.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/BasicTests.cs index 8ef0fb64cb..6d66665d30 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/BasicTests.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/BasicTests.cs @@ -129,7 +129,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests } [Fact] - public async Task ReturningTaskFromAction_ProducesNoContentResult() + public async Task ReturningTaskFromAction_ProducesEmptyResult() { // Arrange var server = TestHelper.CreateServer(_app, SiteName, _configureServices); @@ -139,8 +139,9 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests var response = await client.GetAsync("http://localhost/Home/ActionReturningTask"); // Assert - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("Hello, World!", Assert.Single(response.Headers.GetValues("Message"))); + Assert.Empty(await response.Content.ReadAsStringAsync()); } [Fact] diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/OutputFormatterTest.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/OutputFormatterTest.cs index 4d254e7020..86ceedad16 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/OutputFormatterTest.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/OutputFormatterTest.cs @@ -60,7 +60,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests [Theory] [InlineData("ReturnTask")] [InlineData("ReturnVoid")] - public async Task NoContentFormatter_ForVoidAndTaskReturnType_GetsSelectedAndWritesResponse(string actionName) + public async Task NoContentFormatter_ForVoidAndTaskReturnType_DoesNotRun(string actionName) { // Arrange var server = TestHelper.CreateServer(_app, SiteName, _configureServices); @@ -74,7 +74,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests var body = await response.Content.ReadAsStringAsync(); // Response body is empty instead of null. Assert.Empty(body); - Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(0, response.Content.Headers.ContentLength); }