【问题标题】:Asp.Net DbContext ... Why is it called so often in my app? ... ConfusionAsp.Net DbContext ...为什么在我的应用程序中如此频繁地调用它? ... 困惑
【发布时间】:2015-09-21 20:42:55
【问题描述】:

为了学习 Asp.Net Identity,我一直在使用 Microsoft 提供的 Identity Samples 模板,该模板可以通过 NuGet 下载。

https://www.nuget.org/packages/Microsoft.AspNet.Identity.Samples/2.1.0-alpha1

或者在包管理器控制台中运行:

安装包 Microsoft.AspNet.Identity.Samples -Pre


请注意


此示例与 Visual Studio 附带的示例不同。 VS 附带的仍然使用 Identity V1.0,而 NuGet 上的包使用 V2.1。因此,我没有在 VS 示例中仅验证 NuGet 示例中的这种行为。

我的简单问题是,为什么在我加载的每个页面上都调用 DbContext 实例 (ApplicationDbContext) 而不仅仅是使用数据库的页面/操作?

例如,如果我在 ApplicationDbContext 方法上放置一个断点,然后从 Index 页面导航到 Contact 页面,或者从 Contact 页面导航到 Index 页面,甚至到我创建的随机测试页面,DBContext 方法被触发并贯穿所有 UserManager、RoleManager 和 SignInManager 代码。

这正常吗?返回与数据库无关的视图似乎需要做很多额外的工作......

【问题讨论】:

  • 您是否追踪到dbContext 的调用来自何处?有一个选项可以检查每个请求的 cookie 有效性 - 如果是这种情况,可以调低。
  • 这取决于身份验证的设置方式,可能是它在每次请求时重新创建用户 cookie,因此会通过 userManager 等。
  • @trailmax 我确实查看了调用层次结构和调用堆栈,但没有看到任何明显的东西。我也是编程和 VS 的新手,所以我可能找错了地方。知道在哪里可以减少 cookie 验证吗?

标签: asp.net asp.net-mvc asp.net-mvc-5 dbcontext asp.net-identity-2


【解决方案1】:

Identity 有一个配置选项来检查 cookie - 如果它仍然有效。不确定您下载的 nuget 的默认值是什么,但您可以在 App_Start\Startup.Auth.cs 中更改它,查找如下代码:

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                // Enables the application to validate the security stamp when the user logs in.
                // This is a security feature which is used when you change a password or add an external login to your account.  
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });        

您需要检查您的validateInterval 参数,如果时间非常短,请将其设置为 10-15 分钟。

有关完整示例文件,请参阅 here

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多