3

我正在尝试创建一个每个请求只运行一次的 ActionFilterAttribute,所以我正在做这样的事情。

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (filterContext.IsChildAction)
        return;

    // More stuff here
}

在某些情况下,我可能需要检查这filterContext.HttpContext.Request.IsAjaxRequest()也是错误的,但我真正的问题是如何判断它不是重定向。当 actionX重定向到 actionY时,过滤器运行两次 forX和一次 for Y(对于IsChildAction是 false Y)。

我试图在 上保存一些键filterContext.HttpContext.Items,这将告诉我过滤器已经运行,但这些项目不在 和 之间X共享Y

有什么想法可以告诉我ActionExecutingContext这是重定向吗?

4

1 回答 1

0

我相信这样的东西是你正在寻找的:

使用 MVC 操作过滤器捕获 Ajax 请求中的重定向并返回 JsonResult

您可以检查它是重定向结果还是重定向到路由结果

var redirectResult = filterContext.Result as RedirectResult;
    if (filterContext.Result is RedirectResult)
    {
        // It was a RedirectResult => do something
    }
    else if (filterContext.Result is RedirectToRouteResult)
    {
        // It was a RedirectToRouteResult => do something

    }
于 2013-04-26T21:49:50.137 回答