Files
Umbraco-CMS/src/Umbraco.Web/Mvc/ControllerContextExtensions.cs
2020-11-03 14:25:45 +01:00

40 lines
1.6 KiB
C#

using System.Web.Mvc;
using Umbraco.Web.Composing;
namespace Umbraco.Web.Mvc
{
public static class ControllerContextExtensions
{
/// <summary>
/// Gets the Umbraco context from a controller context hierarchy, if any, else the 'current' Umbraco context.
/// </summary>
/// <param name="controllerContext">The controller context.</param>
/// <returns>The Umbraco context.</returns>
public static IUmbracoContext GetUmbracoContext(this ControllerContext controllerContext)
{
var o = controllerContext.GetDataTokenInViewContextHierarchy(Core.Constants.Web.UmbracoContextDataToken);
return o != null ? o as IUmbracoContext : Current.UmbracoContext;
}
/// <summary>
/// Recursively gets a data token from a controller context hierarchy.
/// </summary>
/// <param name="controllerContext">The controller context.</param>
/// <param name="dataTokenName">The name of the data token.</param>
/// <returns>The data token, or null.</returns>
/// MIGRATED TO NETCORE AS EXTENSION ON ActionContext
internal static object GetDataTokenInViewContextHierarchy(this ControllerContext controllerContext, string dataTokenName)
{
var context = controllerContext;
while (context != null)
{
object token;
if (context.RouteData.DataTokens.TryGetValue(dataTokenName, out token))
return token;
context = context.ParentActionViewContext;
}
return null;
}
}
}