.net ActionFilterAttribute未重定向
我的ActionFilterTriute有问题,无法正确重定向。我不熟悉完整的代码库,但我已经看到了足够多的东西,无法理解到底发生了什么 为了简化代码,我删除了不相关的部分:.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
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的空值。如果您注释所有逻辑,只保留最后一行,那么重定向是否有效?