Files
Umbraco-CMS/src/Umbraco.Web.Common/ApplicationModels/VirtualPageApplicationModelProvider.cs
Bjarke Berg bfb78e937f 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

62 lines
2.2 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Umbraco.Cms.Core.Models.PublishedContent;
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>();
}
}