Свойства атрибута могут быть только постоянными значениями и должны быть известны во время компиляции:
[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;
}
но ИМХО это было бы большой тратой, так что не делайте этого: -)