using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc.ApplicationModels; using Microsoft.AspNetCore.Mvc.ModelBinding; using Umbraco.Cms.Web.Common.Attributes; namespace Umbraco.Cms.Web.Common.ApplicationModels { // TODO: This should just exist in the back office project /// /// An application model provider for all Umbraco Back Office controllers /// public class BackOfficeApplicationModelProvider : IApplicationModelProvider { private readonly List _actionModelConventions = new List() { new BackOfficeIdentityCultureConvention() }; /// /// /// Will execute after /// public int Order => 0; /// public void OnProvidersExecuted(ApplicationModelProviderContext context) { } /// public void OnProvidersExecuting(ApplicationModelProviderContext context) { foreach (ControllerModel controller in context.Result.Controllers) { if (!IsBackOfficeController(controller)) { continue; } foreach (ActionModel action in controller.Actions) { foreach (IActionModelConvention convention in _actionModelConventions) { convention.Apply(action); } } } } private bool IsBackOfficeController(ControllerModel controller) => controller.Attributes.OfType().Any(); } }