问题
创建将在默认MVC AuthorizeAttribute之前执行的自定义IAuthorizeAttribute
。默认的AuthorizeAttribute似乎总是在我的自定义属性之前运行。
我尝试过的事情
filters.Add(new HandleCrossDomainAuthenticationAttribute() { Order = 1 });
自定义属性
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
给我带来困难的时候,它确实有效。但这不是一个非常易于管理的方式......
答案 0 :(得分:0)
我必须按照我想要的方式阅读msdn文章......
Order属性采用一个必须为0的整数值(默认值) 或更高,但有一个例外。省略Order属性给出了 过滤订单值-1,表示未指定的订单。任何 Order属性设置为-1的作用域中的动作过滤器将以未确定的顺序执行,但是之前具有 指定的订单。
因此,阅读本文,除非您编写自定义AuthorizeAttribute
或自定义ControllerActionInvoker
,否则似乎无法按照我的意愿行事。真的太糟糕了!