【问题标题】:Logging of first application start - where to put the logging method?第一个应用程序启动的日志记录 - 将日志记录方法放在哪里?
【发布时间】:2020-06-18 13:02:54
【问题描述】:

我正在维护一个大约有 30 位用户使用的应用程序。每次用户启动应用程序时,我都想登录到数据库。我应该在哪里放置这样的日志记录方法以避免在用户访问的每个新页面都调用该方法?

控制器的构造函数?

【问题讨论】:

  • 你是什么意思:“启动应用程序”?登录?这是一个网络应用程序(假设是因为你说控制器)?如果不是,它是什么类型的应用程序?
  • 是的,它是一个 MVVM 网络应用程序。没有登录,我们使用 Windows 身份验证。我刚刚看到这里为每个请求生成了一个控制器。这意味着控制器的构造函数将是放置日志记录方法的错误位置,对吗? stackoverflow.com/questions/1763775/…
  • 我刚刚证实了这一点。如果我将方法放在控制器的构造函数中,则每个页面访问都会单独记录。
  • 使用 Windows 身份验证意味着登录。这并不意味着用户必须输入凭据,但您有一些机制可以确定用户是否可以访问给定资源。这可能与cookie有关。那里的某个地方会有你想要的地方。控制器构造函数绝对不是为每个请求构造的地方。应用启动也与用户的首次访问无关。
  • 您的应用使用会话吗?您可以在中间件中使用 HttpContext.Session 吗?

标签: asp.net-core


【解决方案1】:

我现在已经设法使用会话来实现这一点:

控制器:

public MyController(IHttpContextAccessor httpContextAccessor)
{


    if (string.IsNullOrEmpty(httpContextAccessor.HttpContext.Session.GetString("login")))
    {
        LoginStatistics("Henry Miller");
        httpContextAccessor.HttpContext.Session.SetString("samLogin", "1");
    }
}


private void LoginStatistics(string userLogin)
{
            myContext.LoginStatistics.Add(new LoginStatistics
            {
                Controller = "MyController",
                UserId = userLogin,
                TimeOfLogin = DateTime.Now
            });
            myContext.SaveChanges();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多