2014-01-10 4 views
0

Я определяю настраиваемый атрибут контроллера для выполнения функций безопасности. Как я могу узнать значение атрибута, напримерКак читать значение атрибута из пользовательского атрибута класса контроллера

[NavAttribute(Navigation = "Home")] 
public class HomeController : Controller 
{ 
    [SharePointContextFilter] 
    public ActionResult Index() 
    {... 

ответ

0

Эта строка кода предоставит вам атрибуты класса.

typeof(HomeController).GetCustomAttributes(typeof(NavAttribute), true); 

Для метода

typeof(HomeController).GetMethod("Index").GetCustomAttributes(typeof(SharePointContextFilter), true); 
+0

Могу ли я создать статическую функцию, которая могла бы считывать значение атрибута, например, если я отправляю объект контроллера какой-либо статической функции, и он считывает значение из атрибута. – sagheer

+1

Да. Используйте 'controllerObject.GetType(). GetCustomAttributes'. –

0

Нет по-разному, что чтение любой другой атрибут.

 Type myType = typeof(MyClass1); 
     // Get the members associated with MyClass1. 
     MemberInfo[] myMembers = myType.GetMembers(); 

     // Display the attributes for each of the members of MyClass1. 
     for(int i = 0; i < myMembers.Length; i++) 
     { 
      Object[] myAttributes = myMembers[i].GetCustomAttributes(true); 
      if(myAttributes.Length > 0) 
      { 
       Console.WriteLine("\nThe attributes for the member {0} are: \n", myMembers[i]); 
       for(int j = 0; j < myAttributes.Length; j++) 
        Console.WriteLine("The type of the attribute is {0}.", myAttributes[j]); 
      } 
     } 

Если вы ищете конкретный атрибут:

myMembers[i].GetCustomAttributes(typeof(AttributeClassName),true); 
-1

Я уверен, что это как директивы препроцессора и не может быть получено во время выполнения. Вы можете сделать что-то подобное:

[OutputCache(
    NoStore = HttpContext.Current.IsDebuggingEnabled, 
    Duration=(HttpContext.Current.IsDebuggingEnabled)?0:15 
)] 
public ActionResult RenderSomething(int somethingID) 
{ 
... 
} 

ИЛИ:

if DEBUG 
    [OutputCache(
     NoStore = HttpContext.Current.IsDebuggingEnabled, 
     Duration = 0)] 
#else 
    [OutputCache(
     NoStore = HttpContext.Current.IsDebuggingEnabled, 
     Duration = 15)]  
#endif 

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

+0

После прочтения ниже ответа МакКэуна. Я оказался ошибочным. Вы можете получить значения во время выполнения. Не думайте, что вы можете изменить значения. –

+0

что ты говоришь, я потерял .. – sagheer

+0

У меня была аналогичная проблема, и я думал, что у нас такая же проблема. Оказалось, что моя проблема заключалась в возможности перезаписывать директивы. Вы спрашиваете, читаются ли они в функции, которую они украшают, и T McKeown показал способ, которым это можно сделать. –

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