c# - 在 ASP.NET Core 中有条件隐藏操作方法的简单便捷方法

标签 c# asp.net-core .net-core

我正在寻找简单方便的方法来隐藏 ASP.NET Core Controller 中的操作方法。
由于某种原因,很难找到完整且令人满意的答案。

例如,我想在给定环境值的特定 Controller 中隐藏特定操作方法(即 IWebHostEnvironment.EnvironmentName != Development)。

我知道ServiceFilterAttribute ,但这是阻止执行方法的方法,我更喜欢从任何地方完全删除操作方法(正如我所说,有条件地),包括生成的 swagger 模式。类似 NonAction 属性,但使用运行时条件。 不过,如果可能的话,我更喜欢使用自定义属性来装饰操作方法。

有人知道实现这种行为的任何便捷方法吗?

最佳答案

我认为您应该能够通过创建自定义IApplicationModelConvention

来做到这一点
public class RemoveActionConvention : IApplicationModelConvention
{
    public void Apply(ApplicationModel application)
    {
        foreach (var controller in application.Controllers)
        {
            var toBeRemoved = new List<ActionModel>();
            foreach (var action in controller.Actions)
            {
                if (ShouldBeRemoved(action))
                {
                    toBeRemoved.Add(action);
                }
            }

            foreach (var action in toBeRemoved)
            {
                controller.Actions.Remove(action);
            }
        }
    }
}

并将其添加到 MVC 约定

services.AddMvc(options =>
{
    options.Conventions.Add(new RemoveActionConvention());
});

关于c# - 在 ASP.NET Core 中有条件隐藏操作方法的简单便捷方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69118906/

相关文章:

c# - 如何创建下载的文本文件的 SHA256 哈希

c# - 将 ArrayPool 对象提供给 JsonOutputFormatter 构造函数

azure - 使用发布管道将.NET Core 3.0 API部署到Azure Web App

c# - HttpClient的多种实现

api - 我们如何设计 .net core api Controller 来接受字符串数组值

c# - 是否可以根据结果再次运行相同的 specflow 测试?

c# - 读取存储在数组中的不同目录中的每个文件

c# - 没有完全理解为什么我要在类中有一个接口(interface),而不是继承它

c# - 运行 .NET Core API Linux 环境启动配置文件

c# - 如何删除点网核心输入模型中的多余空格?