gpt4 book ai didi

asp.net - 在调用 "WebSecurity.InitializeDatabaseConnection"类的任何其他方法之前,必须先调用 "WebSecurity"方法

转载 作者:行者123 更新时间:2023-12-03 10:32:59 26 4
gpt4 key购买 nike

除了 AccountController.cs 文件中已经生成的内容,我无法让 WebSecurity 对象在任何地方工作。帐户 Controller 有 [InitializeSimpleMembership]属性设置在顶部。登录功能不提示调用 WebSecurity.Login(...) , 例如。我向 AccountController 添加了一个子操作:

[ChildActionOnly]
[AllowAnonymous]
public ActionResult NavBar()
{
NavBarViewModel viewModel = new NavBarViewModel();
viewModel.LinkItems = new List<NavBarLinkItem>();

if (Request.IsAuthenticated)
{
SimpleRoleProvider roleProvider = new SimpleRoleProvider();
if (roleProvider.IsUserInRole(User.Identity.Name, "User"))
{
viewModel.LinkItems.Add(new NavBarLinkItem()
{ Title = "Create Project", Action = "Create", Controller = "Project" });

}

}

viewModel.LinkItems.Add(new NavBarLinkItem() { Title="Help", Action="Index", Controller="Help" });

return PartialView("_NavBar", viewModel);
}

保持原样,代码在“if (roleProvider.IsUserInRole(User.Identity.Name, "User"))”行上崩溃,并带有主题错误消息。所以我进入 InitialzeSimpleMembershipAttribute.cs 文件并在我的函数顶部复制/粘贴这一行:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

...并收到一条错误消息,指出 WebSecurity.InitializeDatabaseConnection 应该只调用一次。这是有道理的,因为在 Controller 定义的顶部有一个属性应该已经调用了这个函数(而且看起来它做得很好)。所以为了安全起见,我将上面的调用改为:
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId",
"UserName", autoCreateTables: true);
}

...并返回原始错误消息,应该在 blah blah blah 之前调用 WebSecurity.InitializeDatabaseConnection。对这种疯狂的任何见解将不胜感激

最佳答案

这里有更好的解释:
http://odetocode.com/blogs/scott/archive/2012/09/24/perils-of-the-mvc4-accountcontroller.aspx

这是您所需要做的所有事情:

  • 删除 [InitializeSimpleMembership]从顶部 AccountController
  • 复制 WebSecurity.InitializeDatabaseConnection(...)从/Filters/InitializeSimpleMembershipAttribute.cs(第 39 行)调用到/AppStart/AuthConfig.cs
  • 随意从您的项目中删除 InitializeSimpleMembershipAttribute.cs

  • 您不必添加 InitializeDatabaseConnection()调用 AuthConfig.RegisterAuth()但这似乎是合乎逻辑的地方,可以让您的 Global.asax 更干净。

    您本质上所做的是从原始属性中提取初始化调用,并在 Application_Start 上显式调用它。属性中的其他所有内容只是条件检查,以防您不使用(或不需要)SimpleMembership。

    关于asp.net - 在调用 "WebSecurity.InitializeDatabaseConnection"类的任何其他方法之前,必须先调用 "WebSecurity"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128218/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com