【问题标题】:Tell in an ActionFilterAttribute whether this is a redirect在 ActionFilterAttribute 中判断这是否是重定向
【发布时间】:2013-02-12 10:13:13
【问题描述】:

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

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

    // More stuff here
}

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

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

我有什么想法可以从ActionExecutingContext 看出这是一个重定向吗?

【问题讨论】:

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


    【解决方案1】:

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

    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
    
        }
    

    【讨论】:

    • 我的过滤器的目的是在满足某些条件时阻止操作。我需要 OnActionExecuting 而不是 OnActionExecuted 的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多