diff --git a/src/Umbraco.Web.Common/Controllers/RenderController.cs b/src/Umbraco.Web.Common/Controllers/RenderController.cs
index 84354e4988..4d74dd1767 100644
--- a/src/Umbraco.Web.Common/Controllers/RenderController.cs
+++ b/src/Umbraco.Web.Common/Controllers/RenderController.cs
@@ -53,6 +53,26 @@ namespace Umbraco.Cms.Web.Common.Controllers
///
public virtual IActionResult Index() => CurrentTemplate(new ContentModel(CurrentPage));
+ ///
+ /// Gets an action result based on the template name found in the route values and a model.
+ ///
+ /// The type of the model.
+ /// The model.
+ /// The action result.
+ ///
+ /// If the template found in the route values doesn't physically exist, Umbraco not found result is returned.
+ ///
+ protected override IActionResult CurrentTemplate(T model)
+ {
+ if (EnsurePhsyicalViewExists(UmbracoRouteValues.TemplateName) == false)
+ {
+ // no physical template file was found
+ return new PublishedContentNotFoundResult(UmbracoContext);
+ }
+
+ return View(UmbracoRouteValues.TemplateName, model);
+ }
+
///
/// Before the controller executes we will handle redirects and not founds
///
@@ -123,6 +143,6 @@ namespace Umbraco.Cms.Web.Common.Controllers
{
return new PublishedContentNotFoundResult(UmbracoContext);
}
- }
+ }
}
}
diff --git a/src/Umbraco.Web.Common/Controllers/UmbracoPageController.cs b/src/Umbraco.Web.Common/Controllers/UmbracoPageController.cs
index 0e6b6d0d0c..f9840df370 100644
--- a/src/Umbraco.Web.Common/Controllers/UmbracoPageController.cs
+++ b/src/Umbraco.Web.Common/Controllers/UmbracoPageController.cs
@@ -74,7 +74,7 @@ namespace Umbraco.Cms.Web.Common.Controllers
/// The model.
/// The action result.
/// If the template found in the route values doesn't physically exist and exception is thrown
- protected IActionResult CurrentTemplate(T model)
+ protected virtual IActionResult CurrentTemplate(T model)
{
if (EnsurePhsyicalViewExists(UmbracoRouteValues.TemplateName) == false)
{
@@ -90,6 +90,13 @@ namespace Umbraco.Cms.Web.Common.Controllers
/// The view name.
protected bool EnsurePhsyicalViewExists(string template)
{
+ if (string.IsNullOrWhiteSpace(template))
+ {
+ string docTypeAlias = UmbracoRouteValues.PublishedRequest.PublishedContent.ContentType.Alias;
+ _logger.LogWarning("No physical template file was found for document type with alias {Alias}", docTypeAlias);
+ return false;
+ }
+
ViewEngineResult result = _compositeViewEngine.FindView(ControllerContext, template, false);
if (result.View != null)
{
@@ -99,6 +106,5 @@ namespace Umbraco.Cms.Web.Common.Controllers
_logger.LogWarning("No physical template file was found for template {Template}", template);
return false;
}
-
}
}