告诉ActionFilterAttribute这是否是重定向

时间:2013-02-12 10:13:14

标签: asp.net-mvc asp.net-mvc-4 actionfilterattribute

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

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

    // More stuff here
}

在某些情况下,我可能需要检查filterContext.HttpContext.Request.IsAjaxRequest()是否也是假的,但我真正的问题是如何判断它不是重定向。当操作X重定向到操作Y时,过滤器会针对X运行一次,针对Y运行一次(IsChildActionY为false })。

我尝试在filterContext.HttpContext.Items上保存一些密钥,这会告诉我过滤器已经运行,但这些项目不会在XY之间共享。

我可以从ActionExecutingContext告诉我这是一个重定向吗?

1 个答案:

答案 0 :(得分:0)

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

Using an MVC Action Filter to catch redirects in Ajax requests and return a 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

    }