ASP.NET和Web编程对我来说有点新鲜。我在MVC5中编写Web应用程序,除了AspNetUser表中提供的信息外,还需要其他信息。
我遇到了一篇很好的文章(http://www.codeproject.com/Articles/674760/Code-First-Migration-and-Extending-Identity-Accoun),用于使用代码优先扩展表。我添加了ExpirationDate
字段来跟踪用户订阅何时到期。注册,电子邮件验证和登录工作完美无缺。
我接下来需要允许订阅的用户访问他们的"仪表板"。我尝试在[ChildActionOnly]
中使用AccountController
指向_LoginPartial.cshtml
中设置的部分视图,但是我遇到了需要调用异步方法来获取用户数据的问题阻止线程的错误。所以我想我会给菜单上的每个人(当前订阅或不订阅)Dashboard链接,然后在DashboardController
内将其重定向到正确的页面。如果他们没有订阅,请将他们带到订阅页面,否则将他们带到他们的仪表板。这意味着DashboardController
将需要ApplicationUserManager
,并且每个函数都必须是异步的并执行类似的操作:
ApplicationUser user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
if (user.ExpirationDate < DateTime.Today)
return RedirectToAction("Expired");
else
theCorrectPage
我真的不确定最好的方法是什么。
尝试使用AntiForgeryConfig.AdditionalDataProvider
(我对此并不了解,也不确定是否会与OWIN发生冲突)
将上述代码添加到控制器的每个功能中,只需手动获取到期日期。
使用角色并指定或取消分配人员#34;已订阅&#34;作用。
冒险进入声明(这似乎是新的方式)并为订阅成员创建某种声明。
有没有一种简单的方法可以在不跳过篮球的情况下即时获取用户信息?有没有办法创建覆盖,以便[ValidateAntiForgeryToken]
考虑我的新ExpirationDate
字段?我希望有一种方法可以覆盖UserManager
,这样我就可以创建一个UserManager.GetExpirationDateAsync
方法......
您认为最好的方法是什么? 欣赏这方面的任何启示...... 感谢