我在尝试建立身份验证系统时遇到了问题。我正在使用ASP.NET MVC 4和Linq to SQL Classes。
首先,有一个调用相关控制器的登录视图。这就是我正在按照他们的角色连接和重定向我的用户。
public class LoginController : Controller
{
//
// GET: /Login/
T2A_DataClassesDataContext db;
public LoginController()
{
db = new T2A_DataClassesDataContext();
}
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(LoginViewModel lvm)
{
if (ModelState.IsValid)
{
if (WebSecurity.Login(lvm.Username, lvm.Password, false))
{
var login = from u in db.Users where u.Username == lvm.Username select new User { Username = u.Username, Password = u.Password, IsAdmin = u.IsAdmin };
User user = (User)login;
String role = user.IsAdmin == true ? "Utilisateur" : "Administrateur";
return RedirectToAction("Index", role);
}
else
{
ModelState.AddModelError("", "Identifiants erronés !");
}
}
return View();
}
}
当我编译解决方案时,输入正确的凭据并提交它,它失败了,这就是我得到的:
在调用“WebSecurity”类的任何其他方法之前,必须调用“WebSecurity.InitializeDatabaseConnection”方法。此调用应放在站点根目录中的_AppStart.cshtml文件中。
我知道这个消息很清楚,但我不知道如何继续这样做。有帮助吗?
答案 0 :(得分:0)
WebSecurity. InitializeDatabaseConnection
将通过创建必要的表来填充您的数据库以供成员资格提供程序使用。所以你必须在调用WebSecurity的任何其他功能之前调用它。在您的应用程序中,找到Application_Start
(在Global.ascx.cs
中)并在其中调用初始化代码。例如
if (!WebSecurity.Initialized)
WebSecurity.InitializeDatabaseConnection("yourConnectionStringInConfigFile","UserProfile", "UserId", "UserName", autoCreateTables: true);
yourConnectionStringInConfigFile
将是您在webconfig中的连接字符串。调用上面的代码后,WebSecurity将创建一个名为UserProfile的表以及其他必需的表。