Я использую MVC и имею ситуацию, когда в моем OnActionExecuting ()
мне нужно определить, используется ли метод Action который вот-вот будет выполнен, украшен атрибутом, в частности AuthorizeAttribute
. Я не спрашиваю, прошла ли авторизация успешно / не удалось, вместо этого я спрашиваю, требует ли метод авторизации.
Для людей, не использующих mvc filterContext.ActionDescriptor.ActionName
- это имя метода, который я ищу. Однако это не метод, выполняемый в данный момент; скорее, это метод, который будет выполнен в ближайшее время.
В настоящее время у меня есть блок кода, подобный приведенному ниже, но я не очень доволен циклом перед каждым действием. Есть ли лучший способ сделать это?
System.Reflection.MethodInfo[] actionMethodInfo = this.GetType().GetMethods();
foreach(System.Reflection.MethodInfo mInfo in actionMethodInfo) {
if (mInfo.Name == filterContext.ActionDescriptor.ActionName) {
object[] authAttributes = mInfo.GetCustomAttributes(typeof(System.Web.Mvc.AuthorizeAttribute), false);
if (authAttributes.Length > 0) {
break;
}
}
}
Это немного похоже на слегка ошибочное название « Как определить, украшен ли класс определенным атрибутом », но не совсем.