我正在寻找简单方便的方法来隐藏 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/