diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs b/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs index 7257402dcc..d34770ca35 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs @@ -203,6 +203,32 @@ public ClaimsPrincipal User } } + /// + /// Creates a object by specifying a . + /// + /// The status code to set on the response. + /// The created object for the response. + [NonAction] + public virtual StatusCodeResult StatusCode(int statusCode) + { + return new StatusCodeResult(statusCode); + } + + /// + /// Creates a object by specifying a and + /// + /// The status code to set on the response. + /// The value to set on the . + /// The created object for the response. + [NonAction] + public virtual ObjectResult StatusCode(int statusCode, object value) + { + var result = new ObjectResult(value); + result.StatusCode = statusCode; + + return result; + } + /// /// Creates a object by specifying a string. /// @@ -266,7 +292,6 @@ public virtual ContentResult Content(string content, MediaTypeHeaderValue conten return result; } - /// /// Creates a object that produces an empty No Content (204) response. /// diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs index 37235898da..75437ad81d 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs @@ -1061,6 +1061,54 @@ public void Controller_Content_CharsetInContentType_IsUsedForEncoding() Assert.Equal(contentType, contentResult.ContentType); } + [Fact] + public void Controller_StatusCode_SetObject() + { + // Arrange + var statusCode = 204; + var value = new { Value = 42 }; + + var statusCodeController = new StatusCodeController(); + + // Act + var result = (ObjectResult)statusCodeController.StatusCode_Object(statusCode, value); + + // Assert + Assert.Equal(statusCode, result.StatusCode); + Assert.Equal(value, result.Value); + } + + [Fact] + public void Controller_StatusCode_SetObjectNull() + { + // Arrange + var statusCode = 204; + object value = null; + + var statusCodeController = new StatusCodeController(); + + // Act + var result = statusCodeController.StatusCode_Object(statusCode, value); + + // Assert + Assert.Equal(statusCode, result.StatusCode); + Assert.Equal(value, result.Value); + } + + [Fact] + public void Controller_StatusCode_SetsStatusCode() + { + // Arrange + var statusCode = 205; + var statusCodeController = new StatusCodeController(); + + // Act + var result = statusCodeController.StatusCode_Int(statusCode); + + // Assert + Assert.Equal(statusCode, result.StatusCode); + } + public static IEnumerable RedirectTestData { get @@ -1640,6 +1688,19 @@ public void Dispose() } } + private class StatusCodeController : ControllerBase + { + public StatusCodeResult StatusCode_Int(int statusCode) + { + return StatusCode(statusCode); + } + + public ObjectResult StatusCode_Object(int statusCode, object value) + { + return StatusCode(statusCode, value); + } + } + private class ContentController : ControllerBase { public IActionResult Content_WithNoEncoding()