.net ActionFilterAttribute未重定向

.net ActionFilterAttribute未重定向,.net,asp.net-mvc,asp.net-mvc-4,actionfilterattribute,.net,Asp.net Mvc,Asp.net Mvc 4,Actionfilterattribute,我的ActionFilterTriute有问题,无法正确重定向。我不熟悉完整的代码库,但我已经看到了足够多的东西,无法理解到底发生了什么 为了简化代码,我删除了不相关的部分: public class ResolveApplicationRedirectAttribute : ActionFilterAttribute { //some variables private ActionExecutingContext _filterContext; protected

我的ActionFilterTriute有问题,无法正确重定向。我不熟悉完整的代码库,但我已经看到了足够多的东西,无法理解到底发生了什么

为了简化代码,我删除了不相关的部分:

public class ResolveApplicationRedirectAttribute : ActionFilterAttribute
{
    //some variables
    private ActionExecutingContext _filterContext;

    protected string ApplicationRedirectUrl
    {
        get { return ConfigurationManager.AppSettings["ApplicationRedirectUrl"]; }
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        _filterContext = filterContext;

        //a lot of logic that decide if we should redirect or not

        //I added this after the other logic to make it always redirect regardless of what happens inside the logic above
        _filterContext.Result = new RedirectResult(ApplicationRedirectResult);
    }
}

[ResolveApplicationRedirect]
public ActionResult Index(CrmQueryStringParameters crmParameters){
  //some logic
}
这通常是可行的,但是当应用程序在短时间内被几个请求击中时,Index方法最终会被调用,并且会因为视图缺少一些数据而崩溃(我们知道它缺少数据。这就是我们想要重定向的原因)

但是现在,当我添加了
\u filterContext.Result=new RedirectResult(ApplicationRedirectResult)
作为
OnActionExecuting
方法的最后一行时,它怎么可能仍然调用我的Action方法呢

是否存在任何已知的bug/死角案例/任何其他可能导致MVC忽略我放入
filterContext
中的
RedirectResult
并触发操作方法的情况

OnActionExecuting逻辑中的任何特殊内容,即使我将filterContext.Result设置为最后一行,也会导致问题。属性中的任何异常都应该将其放大,而不是跳过该属性并调用Action方法


如果您能为我指出正确的方向,我们将不胜感激。

+1感谢Wouter的结果。鉴于您展示的代码,不可能实现您描述的结果。也许这里的
//魔术逻辑
正在返回一个空的
\u filterContext.Result

我终于找到了问题。它与使用
\u filterContext
类变量有关

问题是MVC没有为每个请求创建过滤器的新实例,导致多个请求共享同一个属性实例


有关更多详细信息,请参阅中断更改列表。

如果查看MVC的源代码,您将看到一个调用ActionMethodFilter的方法,该方法在过滤器上执行OnActionExecuting,并传递ActionExecutingContext。如果返回的结果值为非null,则返回ActionExecutedContext,跳过调用您的操作。所以,在某种程度上,你所看到的是不可能的。所以,唯一的问题可能是Result的空值。如果您注释所有逻辑,只保留最后一行,那么重定向是否有效?