Я использую 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;
}
}
}
Это немного похоже на слегка озаренный "Как определить, был ли класс украшен определенным атрибутом", но не совсем.