Orchard CMS: Layout для страницы 404 NotFound

В Orchard CMS есть возможность сделать свою кастомную страницу 404. У Orchard есть ErrorController, который имеет NotFound action:

[Themed]
public class ErrorController : Controller {

    public ActionResult NotFound(string url) {
        return HttpNotFound();
    }
}

Для задания своей кастомной страницы 404 достаточно создать шаблон NotFound.cshtml в папке Views вашей темы.

Но здесь кроется такая проблема: ErrorController имеет атрибут Themed, который применяет к данному View Layout.cshtml. Если вы явно хотите указать Layout для страницы 404, то хороший план, это добавить в тему LayoutFilter:

public class LayoutFilter : FilterProvider, IResultFilter
{
    private readonly IWorkContextAccessor _workerWorkContextAccessor;

    public LayoutFilter(IWorkContextAccessor workerWorkContextAccessor)
    {
        _workerWorkContextAccessor = workerWorkContextAccessor;
    }

    public void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var workContext = _workerWorkContextAccessor.GetContext();
        if (workContext.HttpContext.Response.StatusCode == 404)
        {
            workContext.Layout.Metadata.Alternates.Add("Layout_404");
        }
    }

    public void OnResultExecuted(ResultExecutedContext filterContext)
    {
    }
}
Дерево Shape-ов
Дерево Shape-ов

Теперь достаточно добавить в тему шаблон Layout_404.cshtml, чтобы получить кстомный Layout для страницы 404.