2016-05-17 7 views
0

Мне удалось получить список всех контроллеров и их соответствующих действий в рамках моего проекта. Теперь я пытаюсь создать настраиваемый атрибут, который будет использоваться для каждого действия, где я могу установить свойства, такие как описание действия 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; } 
} 

Спасибо

ответ

0

Используйте это:

Expression<Action<YourController>> myAction = m => m.Index(); 
var method = ((MethodCallExpression)myAction.Body).Method; 
var statusAttributes = method.GetCustomAttributes(); 

Вы можете получить все атрибуты костюма из вышеуказанной коллекции статусных атрибутов.

+0

Если вы хотите получить доступ к дополнительным атрибутам, которые унаследованы от родителя, передайте true в качестве параметра в GetCustomAttributes(). –

+0

Я не выполняю эту функцию внутри самого контроллера. Это происходит в другом контроллере, где я получаю список всех контроллеров, которые получают доступ к системе вместе с их действиями. Теперь для каждого действия я хотел бы получить доступ к пользовательским атрибутам. – Rossco

+0

Будь то, когда я повторяю каждое действие или получаю список контроллеров и действий – Rossco

 Смежные вопросы

  • Нет связанных вопросов^_^