【问题标题】:Check session before running controller issue in ASP.NET core在 ASP.NET 核心中运行控制器问题之前检查会话
【发布时间】:2020-07-09 22:40:27
【问题描述】:

所以我想在控制器中运行任何操作之前检查会话是否存在。我找到了这些解决方案link1,link2 并尝试实施它们。 这是我的SessionAuthorize 课程,这里一切正常:

public class SessionAuthorize : ActionFilterAttribute
{
    private readonly SessionManager _sessionManager;
    public SessionAuthorize(SessionManager sessionManager)
    {
        _sessionManager = sessionManager;
    }
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        if (!_sessionManager.IsLoggedIn)
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary {
                            { "Controller", "Home" },
                            { "Action", "Login" }
                            });
        }
    }
}

现在,问题是当我尝试在控制器中调用它时。所以我应该通过像这样添加[SessionAuthorize] 属性来调用:

[SessionAuthorize]
public class AccountController : Controller
{
    //code
}

但它给了我一个错误,我没有正确调用它。我相信这与我在SessionAuthorize 中用于访问会话的依赖注入有关。但我现在不知道怎么称呼它。

错误信息是:

'没有给出与所需形式相对应的参数 参数 'sessionManager' 的 'SessionAuthorize.SessionAuthorize(SessionManager)'

所以我想知道我应该如何在我的控制器中使用它

【问题讨论】:

  • SessionManager 类是什么?是您编写的课程还是来自图书馆的课程?

标签: asp.net asp.net-mvc asp.net-core .net-core


【解决方案1】:

如果您想避免服务定位器模式,您可以通过构造函数注入使用 DI,并带有 TypeFilter

在您的控制器中尝试使用

[TypeFilter(typeof(SessionAuthorize)]

您的ActionFilterAttribute 不再需要访问服务提供者实例。

【讨论】:

    猜你喜欢
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    相关资源
    最近更新 更多