0

如果会话已过期,我继承了一个使用 Application_PreRequestHandlerExecute 重定向到登录的应用程序。

目前有一个不应调用重定向的硬编码 url 列表。本质上,这些是返回 json 的 ajax 方法,因此它们在 javascript 中单独处理。

我想更改机制,以便默认值(在 Application_PreRequestHandlerExecute 中)保持不变,但替代行为可以由 ActionFilters 在适当的操作(即对应于硬编码的 url 列表的操作)上控制。

如何检查 Application_PreRequestHandlerExecute 中是否存在特定的 ActionFilter?

编辑:也许我需要用全局操作过滤器替换 Application_PreRequestHandlerExecute?

4

1 回答 1

0

简短的回答是用全局动作过滤器替换。

在那里面,filterContext有我需要的一切。

编辑:这是我所追求的要点:

public enum SessionExpiredBehaviour
{
    Redirect,
    Ignore,
    JSON
}


[AttributeUsage(AttributeTargets.Method)]
public class SessionExpiredFilterAttribute : ActionFilterAttribute
{
    public SessionExpiredBehaviour Behaviour { get; set; } = SessionExpiredBehaviour.Redirect;

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        if (HttpContext.Current.Session["User"] == null)
        {
            switch (this.Behaviour)
            {

                case SessionExpiredBehaviour.Redirect:
                    filterContext.Result =
                        new RedirectToRouteResult(new RouteValueDictionary
                        {
                            { "action", "RedirectToLogin" },
                            { "controller", "Account" }
                        });
                    break;

                case SessionExpiredBehaviour.JSON:
                    //TODO
                    break;
            }

        }
        base.OnActionExecuting(filterContext);

    }
}
于 2016-06-23T13:42:23.293 回答