class 具有作为基础 class ActionFilterAttribute 的问题
Problem with class having as base class ActionFilterAttribute
以下 class 创建一个名为 [SessionTimeout] 的自定义操作过滤器:
public class SessionTimeoutAttribute : ActionFilterAttribute
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISession _session;
public SessionTimeoutAttribute(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
_session = _httpContextAccessor.HttpContext.Session;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = _httpContextAccessor.HttpContext;
if (!ctx.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("~/Account/Login");
return;
}
base.OnActionExecuting(filterContext);
}
}
按照现在的实现方式,当我用 [SessionTimeout] 装饰一个 class 时,它还会询问我构造函数的参数。
我想尽可能避免这种情况。
有人可以帮助我吗?
谢谢
HttpContext
是 ActionExecutingContext
对象的 属性,因此您不需要通过构造函数将其传递给它。这样的东西应该可以工作(注意:这没有经过测试)。
public class SessionTimeoutAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = filterContext.HttpContext;
if (!ctx.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("~/Account/Login");
return;
}
base.OnActionExecuting(filterContext);
}
}
以下 class 创建一个名为 [SessionTimeout] 的自定义操作过滤器:
public class SessionTimeoutAttribute : ActionFilterAttribute
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISession _session;
public SessionTimeoutAttribute(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
_session = _httpContextAccessor.HttpContext.Session;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = _httpContextAccessor.HttpContext;
if (!ctx.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("~/Account/Login");
return;
}
base.OnActionExecuting(filterContext);
}
}
按照现在的实现方式,当我用 [SessionTimeout] 装饰一个 class 时,它还会询问我构造函数的参数。
我想尽可能避免这种情况。
有人可以帮助我吗? 谢谢
HttpContext
是 ActionExecutingContext
对象的 属性,因此您不需要通过构造函数将其传递给它。这样的东西应该可以工作(注意:这没有经过测试)。
public class SessionTimeoutAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = filterContext.HttpContext;
if (!ctx.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("~/Account/Login");
return;
}
base.OnActionExecuting(filterContext);
}
}