public class MvcApiJsonRequest : JsonResult { private readonly int _httpStatusCode; private readonly string _invalidHttpStatusCodeMessage = "set httpStatusCode to an allowed http status code"; public MvcApiJsonRequest() { _httpStatusCode = 200; } public MvcApiJsonRequest(object content) : this(200, content) {} public MvcApiJsonRequest(int httpStatusCode) : this(httpStatusCode, null) {} public MvcApiJsonRequest(int httpStatusCode, object content) { // TODO: better method name IsStatusCodeAllowed(httpStatusCode); _httpStatusCode = httpStatusCode; Data = content; } public int HttpStatusCode => _httpStatusCode; public override void ExecuteResult(ControllerContext context) { context.HttpContext.Response.StatusCode = HttpStatusCode; base.ExecuteResult(context); } private void IsStatusCodeAllowed(int httpStatusCode) { switch (httpStatusCode) { case 0: throw new ArgumentOutOfRangeException(nameof(httpStatusCode), _invalidHttpStatusCodeMessage); case 200: break; case 201: break; case 400: break; default: throw new ArgumentOutOfRangeException(nameof(httpStatusCode), _invalidHttpStatusCodeMessage); } } }