在视图中,例如,在“ _Layout.cshtml”中
如何获得调用此视图的控制器/动作?
找到控制器/动作名称后,如何获取其具有的属性列表?或测试它是否具有属性?
谢谢。
@ViewContext.Controller
将为您提供返回此视图的控制器实例。一旦获得实例,便获得类型,一旦获得类型,便进入反射以获取装饰该类型的属性。编写自定义HTML帮助程序来执行此工作可能是值得的:
public static class HtmlExtensions
{
public static bool IsDecoratedWithFoo(this HtmlHelper htmlHelper)
{
var controller = htmlHelper.ViewContext.Controller;
return controller
.GetType()
.GetCustomAttributes(typeof(FooAttribute), true)
.Any();
}
}
由于即使在搜索ASP.NET Core版本时,这也是google中的第一个结果,因此在.NET Core中执行以下操作:Checking for an attribute in an action filter(请升级原始线程)
if (controllerActionDescriptor != null)
{
// Check if the attribute exists on the action method
if (controllerActionDescriptor.MethodInfo?.GetCustomAttributes(inherit: true)?.Any(a => a.GetType().Equals(typeof(CustomAttribute))) ?? false)
return true;
// Check if the attribute exists on the controller
if (controllerActionDescriptor.ControllerTypeInfo?.GetCustomAttributes(typeof(CustomAttribute), true)?.Any() ?? false)
return true;
}