0

学习Asp.Net身份我一直在使用微软提供的身份样本模板,可以通过NuGet下载。Asp.Net DbContext ...为什么在我的应用程序中经常这么叫? ...混乱

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

或包管理器控制台运行:

安装,包装Microsoft.AspNet.Identity.Samples - 预


请注意


这示例与Visual Studios附带的示例不同。 VS附带的一个仍然使用Identity V1.0,NuGet上的软件包使用V2.1。因此,我还没有在VS例子中验证这种行为,只有NuGet。

我的一个简单的问题是,为什么在每个加载的页面上调用DbContext实例(ApplicationDbContext),而不仅仅是使用数据库的页面/操作?例如,如果我在ApplicationDbContext方法上放置断点,然后从索引页面导航到联系页面,或联系页面导航到索引页面,甚至导致随机测试页面,我创建的DBContext方法是解雇了所有的UserManager,RoleManager和SignInManager代码。

这是正常的吗?对于返回与数据库无关的视图来说,似乎有很多额外的工作...

+0

你跟踪调用'dbContext'的地方吗?有一个选项可以检查每个请求的cookie有效性 - 如果是这种情况,可以调低。 – trailmax

+0

这取决于如何设置身份验证,它可能是它重新创建一个用户cookie每个请求,并因此通过userManager等。 – Derek

+0

@trailmax我确实看看调用层次和调用堆栈,但没有看到任何明显的。我也是编程和VS新手,所以我可能会看错地方。任何想法在哪里看淡调cookie验证? – Eddie

回答

0

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查看完整的示例文件。

相关问题