Я использую 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) {
<LOGIC WHEN THE METHOD REQUIRES AUTHORIZAITON>
break;
}
}
}
Это немного похоже на слегка ошибочное " Как определить, украшен ли класс определенным атрибутом ", но не совсем.