Мне удалось получить список всех контроллеров и их соответствующих действий в рамках моего проекта. Теперь я пытаюсь создать настраиваемый атрибут, который будет использоваться для каждого действия, где я могу установить свойства, такие как описание действия Eg. «Это создает пользователя». Кажется, что это работает нормально, но теперь возникает вопрос: как я могу получить пользовательские атрибуты для каждого действия?Как получить все пользовательские атрибуты для каждого действия контроллера в проекте
Ниже приведен список всех контроллеров и действий. Мне просто нужно, чтобы получить каждое действие пользовательских атрибутов называется AccessControl
var controlleractionlist = asm.GetTypes()
.Where(type => typeof(System.Web.Mvc.Controller).IsAssignableFrom(type))
.SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
.Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any())
.Select(x => new { Controller = x.DeclaringType.Name, Action = x.Name, CustomAttr = x.DeclaringType.GetCustomAttributes(typeof(AccessControl), false).Cast<AccessControl>()})
.OrderBy(x => x.Controller).ThenBy(x => x.Action).ToList();
Пример типичного действия контроллера
[HttpGet]
[AccessControl(Description="Creates a user")]
public ActionResult Index()
{
return View();
}
И, наконец, мои пользовательского атрибут класса
public class AccessControl : AuthorizeAttribute
{
public string Description { get; set; }
}
Спасибо
Если вы хотите получить доступ к дополнительным атрибутам, которые унаследованы от родителя, передайте true в качестве параметра в GetCustomAttributes(). –
Я не выполняю эту функцию внутри самого контроллера. Это происходит в другом контроллере, где я получаю список всех контроллеров, которые получают доступ к системе вместе с их действиями. Теперь для каждого действия я хотел бы получить доступ к пользовательским атрибутам. – Rossco
Будь то, когда я повторяю каждое действие или получаю список контроллеров и действий – Rossco