我目前有2个过滤器,Auth和Redirect,它们执行以下操作:Filter Auth(实现IAuthorizationFilter和ActionFilter)检查用户登录和授权,如果失败,则将filterContext.Result设置为403(禁止)的HttpStatusCodeResult 。过滤器重定向(实现IActionFilter和ActionFilter)检查结果,如果它是403,则重定向到登录页面。ASP.NET MVC操作筛选器:在筛选器中设置filterContext.Result可防止执行其他筛选器?
我有他们施加到动作如下:
[Auth(Order=0)]
[Redirect(Order=1)]
然而,验证被执行但重定向从未被执行(未它提供的4种覆写投放方法之一)。如果我删除认证重定向获取执行,但如果我包含认证作为第一个过滤器,重定向不会执行。我想设置过滤器上下文的Result属性会阻止任何其他过滤器被执行,但我不能实现这种情况。仅供参考我正在使用ASP.NET MVC 3测试版,但这不应该改变任何东西。
更新:将Auth的过滤器类型更改为IActionFilter而不是IAuthorizationFilter会导致重定向中的OnResultExecuting和OnResultExecuted触发,但更改Response对浏览器的最终响应没有任何影响。
的HttpStatusCodeResult没有最终会被重定向,它只是告诉ASP.NET MVC服务了一个响应指定的状态码。 – Diego 2010-10-29 23:51:12