В 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-ов
Теперь достаточно добавить в тему шаблон Layout_404.cshtml
, чтобы
получить кстомный Layout для страницы 404.