From 62ee1899ad3d2d884f89eb38e38913f72700b20e Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 1 Oct 2019 17:53:41 +0200 Subject: [PATCH] Fixes Return 503 status code when in upgrade mode #6334 --- .../Editors/BackOfficeController.cs | 1 + .../Install/Controllers/InstallController.cs | 2 ++ .../Mvc/StatusCodeFilterAttribute.cs | 25 +++++++++++++++++++ src/Umbraco.Web/Umbraco.Web.csproj | 1 + 4 files changed, 29 insertions(+) create mode 100644 src/Umbraco.Web/Mvc/StatusCodeFilterAttribute.cs diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs index 61264a743a..e77a1b70f2 100644 --- a/src/Umbraco.Web/Editors/BackOfficeController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeController.cs @@ -145,6 +145,7 @@ namespace Umbraco.Web.Editors /// /// [HttpGet] + [StatusCodeResult(System.Net.HttpStatusCode.ServiceUnavailable)] public async Task AuthorizeUpgrade() { return await RenderDefaultOrProcessExternalLoginAsync( diff --git a/src/Umbraco.Web/Install/Controllers/InstallController.cs b/src/Umbraco.Web/Install/Controllers/InstallController.cs index f45e7a0ae0..902ebbcd53 100644 --- a/src/Umbraco.Web/Install/Controllers/InstallController.cs +++ b/src/Umbraco.Web/Install/Controllers/InstallController.cs @@ -6,6 +6,7 @@ using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Migrations.Install; using Umbraco.Web.JavaScript; +using Umbraco.Web.Mvc; using Umbraco.Web.Security; namespace Umbraco.Web.Install.Controllers @@ -35,6 +36,7 @@ namespace Umbraco.Web.Install.Controllers } [HttpGet] + [StatusCodeResult(System.Net.HttpStatusCode.ServiceUnavailable)] public ActionResult Index() { if (_runtime.Level == RuntimeLevel.Run) diff --git a/src/Umbraco.Web/Mvc/StatusCodeFilterAttribute.cs b/src/Umbraco.Web/Mvc/StatusCodeFilterAttribute.cs new file mode 100644 index 0000000000..24a41519f7 --- /dev/null +++ b/src/Umbraco.Web/Mvc/StatusCodeFilterAttribute.cs @@ -0,0 +1,25 @@ +using System.Net; +using System.Web.Mvc; + +namespace Umbraco.Web.Mvc +{ + /// + /// Forces the response to have a specific http status code + /// + internal class StatusCodeResultAttribute : ActionFilterAttribute + { + private readonly HttpStatusCode _statusCode; + + public StatusCodeResultAttribute(HttpStatusCode statusCode) + { + _statusCode = statusCode; + } + + public override void OnActionExecuted(ActionExecutedContext filterContext) + { + base.OnActionExecuted(filterContext); + + filterContext.HttpContext.Response.StatusCode = (int)_statusCode; + } + } +} diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 166eeba352..a0ce64943a 100755 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -222,6 +222,7 @@ +