Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC操作筛选器:设置filterContext。是否导致筛选器阻止执行其他筛选器?_Asp.net Mvc_Action Filter_Actionfilterattribute - Fatal编程技术网

Asp.net mvc ASP.NET MVC操作筛选器:设置filterContext。是否导致筛选器阻止执行其他筛选器?

Asp.net mvc ASP.NET MVC操作筛选器:设置filterContext。是否导致筛选器阻止执行其他筛选器?,asp.net-mvc,action-filter,actionfilterattribute,Asp.net Mvc,Action Filter,Actionfilterattribute,我目前有两个过滤器,Auth和Redirect,它们执行以下操作:Filter Auth,实现IAAuthorizationFilter和ActionFilter,检查用户登录和授权,如果失败,则将filterContext.Result设置为HttpStatusCodeResult 403(禁止)。Filter Redirect实现IActionFilter和ActionFilter,检查结果,如果是403,则重定向到登录页面 我已将其应用于以下行动: [Auth(Order=0)] [Red

我目前有两个过滤器,Auth和Redirect,它们执行以下操作:Filter Auth,实现IAAuthorizationFilter和ActionFilter,检查用户登录和授权,如果失败,则将filterContext.Result设置为HttpStatusCodeResult 403(禁止)。Filter Redirect实现IActionFilter和ActionFilter,检查结果,如果是403,则重定向到登录页面

我已将其应用于以下行动:

[Auth(Order=0)]
[Redirect(Order=1)]
但是,Auth会被执行,但Redirect永远不会被执行(不是它提供的4种可重写方法之一)。如果我删除了Auth,则会执行重定向,但如果我将Auth作为第一个筛选器,则不会执行重定向。我猜设置过滤器上下文的Result属性会阻止执行任何其他过滤器,但我无法理解为什么会发生这种情况。仅供参考,我正在使用ASP.NET MVC 3测试版,但这不会改变任何事情


更新:将Auth的筛选器类型更改为IActionFilter而不是IAAuthorizationFilter会导致OnResultExecuting和OnResultExecuted in重定向为激发,但更改响应对浏览器的最终响应没有任何影响。

当您设置
HttpStatusCodeResult
时,您正在设置重定向,因此第二个过滤器将不会执行(因为您已经重定向)

我最终通过将重定向设置为IResultFilter并在OnResultExecuting中写入以下内容来修复它:

filterContext.HttpContext.Response.Redirect(url);

HttpStatusCodeResult最终不是重定向,它只是告诉ASP.NET MVC使用指定的状态代码提供响应。