Using Umbraco's notifications handlers it is possible to override the PublishedContent being loaded for the current request.
The example below assumes you have a maintenance mode you can toggle in you Backoffice. When enabled, every page request to your website should display the maintenance page.
Start by creating a MaintenanceHandler.cs
file:
using Umbraco.Cms.Core.Events;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Notifications;
namespace Adventures
{
public class MaintenanceHandler : INotificationHandler<RoutingRequestNotification>
{
public void Handle(RoutingRequestNotification notification)
{
var request = notification.RequestBuilder;
var website = request.PublishedContent?.Root();
if (website == null) return;
var isInMaintenanceMode = website.Value<bool>("maintenanceMode");
if (!isInMaintenanceMode) return;
var maintinancePage = website.Value<IPublishedContent>("maintenancePage");
if (maintinancePage != null)
{
// If maintinance is enabled and the page exists
// we set the content for the request and change the template
request.SetPublishedContent(maintinancePage);
request.TrySetTemplate(maintinancePage.GetTemplateAlias());
}
}
}
}
... and then register it in Program.cs
:
builder.CreateUmbracoBuilder()
.AddBackOffice()
.AddWebsite()
.AddDeliveryApi()
.AddComposers()
.AddNotificationHandler<RoutingRequestNotification, MaintenanceHandler>()
.Build();
Visiting the website before toggling maintenance mode:
Visiting the website after toggling maintenance mode:
Top comments (0)