Проблема
Создайте пользовательский IAuthorizeAttribute
, который будет выполняться перед атрибутом AuthorizeAttribute MVC по умолчанию. AuthorizeAttribute по умолчанию всегда запускается перед моим пользовательским атрибутом.
Вещи, которые я пробовал
- Я сделал собственный атрибут, который наследуется от IAuthorizationFilter.
- Я зарегистрировал этот атрибут как глобальный фильтр следующим образом:
filters.Add(new HandleCrossDomainAuthenticationAttribute() { Order = 1 });
- Я уже читал о фильтрах действий в msdn: http://msdn.microsoft.com/en-us/library/dd381609.aspx
Пользовательский атрибут
public class HandleCrossDomainAuthenticationAttribute : FilterAttribute, IAuthorizationFilter
{
#region IAuthorizationFilter Members
void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
tryCrossDomainAuthentication(filterContext); //this will set the filterContext.Result to a certain url
}
}
#endregion
}
Другие наблюдения
Когда я указываю Order = 2
на AuthorizeAttribute
, что вызывает у меня затруднения, это действительно работает. Но это не очень управляемый путь...