覆盖 Application_PreRequestHandlerExecute
Overriding Application_PreRequestHandlerExecute
我继承了一个应用程序,它使用 Application_PreRequestHandlerExecute 在会话过期时重定向到登录。
目前有一个不应调用重定向的硬编码网址列表。本质上,这些是 return json 的 ajax 方法,因此它们在 javascript.
中单独处理。
我想更改机制,使默认值(在 Application_PreRequestHandlerExecute 中)保持不变,但替代行为可以由 ActionFilters 控制适当的操作(即对应于硬编码列表的操作)网址)。
如何检查 Application_PreRequestHandlerExecute 中是否存在特定的 ActionFilter?
编辑:也许我需要用全局操作过滤器替换 Application_PreRequestHandlerExecute?
简短的回答是替换为全局操作过滤器。
其中,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);
}
}
我继承了一个应用程序,它使用 Application_PreRequestHandlerExecute 在会话过期时重定向到登录。
目前有一个不应调用重定向的硬编码网址列表。本质上,这些是 return json 的 ajax 方法,因此它们在 javascript.
中单独处理。我想更改机制,使默认值(在 Application_PreRequestHandlerExecute 中)保持不变,但替代行为可以由 ActionFilters 控制适当的操作(即对应于硬编码列表的操作)网址)。
如何检查 Application_PreRequestHandlerExecute 中是否存在特定的 ActionFilter?
编辑:也许我需要用全局操作过滤器替换 Application_PreRequestHandlerExecute?
简短的回答是替换为全局操作过滤器。
其中,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);
}
}