ASP.NET MVC: доступ к общедоступному члену ActionFilter из тела действия - PullRequest
1 голос
/ 13 февраля 2011

Допустим, у меня есть ActionFilterAttribute для метода Action в контроллере.Этот фильтр действий предоставляет пару открытых членов (в данном случае свойств).

Есть ли какой-либо способ из тела моего метода Action получить доступ к этим открытым свойствам (необходим только для чтения)?

1 Ответ

2 голосов
/ 13 февраля 2011

Свойства атрибута могут быть только постоянными значениями и должны быть известны во время компиляции:

[MyActionFilter(Prop1 = "SomeProp1", Prop2 = "SomeProp2")]
public ActionResult SomeAction() 
{
    // use "SomeProp1" and "SomeProp2" here
    ...
}

поэтому внутри действия вы уже знаете эти значения, так как жестко закодировали их непосредственно над сигнатурой метода действия. Чтобы избежать жесткого кодирования магических строк в двух разных местах вашей программы, вы можете использовать константы:

public const string Prop1 = "SomeProp1";
public const string Prop2 = "SomeProp2";

и затем:

[MyActionFilter(Prop1 = Constants.Prop1, Prop2 = Constants.Prop2)]
public ActionResult SomeAction() 
{
    // use Constants.Prop1 and Constants.Prop2 here
    ...
}

Конечно, вы всегда можете использовать отражение:

var myFilters = (MyActionFilterAttribute[])MethodInfo.GetCurrentMethod()
    .GetCustomAttributes(typeof(MyActionFilterAttribute), false);
if (myFilters.Length > 0)
{
    var prop1 = myFilters[0].Prop1;
    var prop2 = myFilters[0].Prop2;
}

но ИМХО это было бы большой тратой, так что не делайте этого: -)

...