Files
Umbraco-CMS/src/Umbraco.Web.Common/ApplicationModels/VirtualPageApplicationModelProvider.cs

62 lines
2.2 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Umbraco.Cms.Core.Models.PublishedContent;
Netcore: Update code docs generation (#9885) * Updated the code docs to work with new assemblies and namespaces+added conditional build to default pipeline * updated script that generate docs to use .NET 5 * Increased timeout of docs generation + changed to 5.x instead of 5.0.x Fixed wrong namespace, that would be we not have docs for it. * Fixed names in toc, so they are not that long and changed ordering * try custom hack https://github.com/dotnet/docfx/issues/1254#issuecomment-294080535 * revert nonworking hack - Divide prep steps into two. * Changed ordering * Try to generate docs without the build.ps1 script * Try to generate docs without the build.ps1 script * Try to generate docs without the build.ps1 script * Try to remove the examine one, to test if that is the reason it fails on azure pipeline * Try to remove the sqlce one, to test if that is the reason it fails on azure pipeline * Reintroduce Examine and SqlCE docs, as these was not the reason it will not work on azure pipeline. * Test if azure wanna build the docs without explicit version * Fixed two malformed xml docs * hardcode version of docfx, to hopefully let it pass on azure pipeline * hardcode version of docfx, to hopefully let it pass on azure pipeline * Restructure azure pipeline yaml to have stages as areas instead of OS * Restructure azure pipeline yaml to have stages as areas instead of OS * yml restructure * yml restructure * yml restructure * Not hardcoding docfx as the old versions also fail on azure * Fixed Badly formed XML comments * moved condition from job to stage * split build and metadata * indentation * removed wrong char * Try to add more loging on azure pipeline * include less * include less projects * add one more project * More azure pipeline test * indentation * All except infrastructure * publish tasks * Fix link on logo * Extensions also included * Less links * re-introduced infrastructure to the list of projects for generate docfx for. * Add filter * Remove single warning for xmldocs * more logging? * skip some things from the metadata * test using other image * Test if exclude filter works * Test with more explict filters, allowing some docs from Infrastructure * binary search for the file that is the issue * binary search for the file that is the issue * binary search for the file that is the issue * Exclude more folders * Exclude more folders and files * Only exclude files in root of namespace? * more filter trials * more filter trials * add 2 nested folders * all cs files? * Remove test projects * Toc * Update build/azure-pipelines.yml * move display name element * Update build/azure-pipelines.yml Co-authored-by: Mole <nikolajlauridsen@protonmail.ch> Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
2021-03-18 14:48:22 +01:00
using Umbraco.Cms.Web.Common.Controllers;
using Umbraco.Extensions;
namespace Umbraco.Cms.Web.Common.ApplicationModels
{
/// <summary>
/// Applies the <see cref="VirtualPageConvention"/> to any action on a controller that is <see cref="IVirtualPageController"/>
/// </summary>
public class VirtualPageApplicationModelProvider : IApplicationModelProvider
{
private readonly List<IActionModelConvention> _actionModelConventions = new List<IActionModelConvention>()
{
new VirtualPageConvention()
};
/// <inheritdoc />
/// <summary>
/// Will execute after <see cref="DefaultApplicationModelProvider"/>
/// </summary>
public int Order => 0;
/// <inheritdoc />
public void OnProvidersExecuted(ApplicationModelProviderContext context) { }
/// <inheritdoc />
public void OnProvidersExecuting(ApplicationModelProviderContext context)
{
foreach (ControllerModel controller in context.Result.Controllers)
{
if (!IsVirtualPageController(controller))
{
continue;
}
foreach (ActionModel action in controller.Actions.ToList())
{
if (action.ActionName == nameof(IVirtualPageController.FindContent)
&& action.ActionMethod.ReturnType == typeof(IPublishedContent))
{
// this is not an action, it's just the implementation of IVirtualPageController
controller.Actions.Remove(action);
}
else
{
foreach (IActionModelConvention convention in _actionModelConventions)
{
convention.Apply(action);
}
}
}
}
}
private bool IsVirtualPageController(ControllerModel controller)
=> controller.ControllerType.Implements<IVirtualPageController>();
}
}