在ASP中有条件地隐藏动作方法的一种简单方便的方法.净的核心



我正在寻找在ASP控制器中隐藏动作方法的简单方便的方法。净的核心。
由于某种原因,很难找到一个完整而令人满意的答案。

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

我知道ServiceFilterAttribute,但这是防止方法执行的方法,我更喜欢从任何地方(如我所说,有条件地)完全删除action方法,包括生成的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());
});

相关内容

  • 没有找到相关文章

最新更新