50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.Linq;
|
|
using Microsoft.AspNetCore.Mvc.Abstractions;
|
|
using Microsoft.AspNetCore.Mvc.Controllers;
|
|
|
|
namespace RoutingWebSite
|
|
{
|
|
public class RemoveControllerActionDescriptorProvider : IActionDescriptorProvider
|
|
{
|
|
private readonly ControllerToRemove[] _controllerTypes;
|
|
|
|
public RemoveControllerActionDescriptorProvider(params ControllerToRemove[] controllerTypes)
|
|
{
|
|
_controllerTypes = controllerTypes;
|
|
}
|
|
|
|
public int Order => int.MaxValue;
|
|
|
|
public void OnProvidersExecuted(ActionDescriptorProviderContext context)
|
|
{
|
|
}
|
|
|
|
public void OnProvidersExecuting(ActionDescriptorProviderContext context)
|
|
{
|
|
foreach (var item in context.Results.ToList())
|
|
{
|
|
if (item is ControllerActionDescriptor controllerActionDescriptor)
|
|
{
|
|
var controllerToRemove = _controllerTypes.SingleOrDefault(c => c.ControllerType == controllerActionDescriptor.ControllerTypeInfo);
|
|
if (controllerToRemove != null)
|
|
{
|
|
if (controllerToRemove.Actions == null || controllerToRemove.Actions.Contains(controllerActionDescriptor.ActionName))
|
|
{
|
|
context.Results.Remove(item);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class ControllerToRemove
|
|
{
|
|
public Type ControllerType { get; set; }
|
|
public string[] Actions { get; set; }
|
|
}
|
|
} |