c# - 具有作为基类 ActionFilterAttribute 的类的问题
问题描述
以下类创建一个名为 [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] 装饰一个类时,它还会询问我构造函数的参数。
如果可能的话,我想避免这种情况。
有人能帮我吗?谢谢。
解决方案
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);
}
}
推荐阅读
- visual-c++ - 两种方式有什么区别?以及如何通过每种方式保存代码?
- python - 深度学习中的平均池化层和梯度伪影
- django - 如何创建 Firefox 健康检查
- django - django bootstrap 表单中的提交按钮不起作用
- swiftui - 如何更改 TextField 中的字段大小?
- asp.net - 是否可以使用 ASP.net 调用同步 http post 请求?
- kotlin - 从具有 runtimeOnly 依赖项的模块注册 Koin 组件
- django - 'choices' 必须是包含(实际值,人类可读名称)元组的可迭代 django 3.1
- javascript - 通过不同的按钮单击在数组上添加和删除元素
- swift - 表格单元格未在 Swift 上适当调整高度