我正在尝试让SimpleMembership为我的ASP.Net MVC应用程序工作。我需要授权的所有控制器都扩展了一个名为SecureController的基类:
[Authorize]
[InitializeSimpleMembership]
[HandleException]
public class SecureController : Controller
{
protected UserProfile CurrentUser;
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
var currentuserid = WebSecurity.CurrentUserId;
var context = new UsersContext();
CurrentUser = context.UserProfiles.SingleOrDefault(u => u.AuthenticationId == currentuserid);
if (CurrentUser != null)
{
ViewBag.UserName = CurrentUser.Name;
ViewBag.UserId = CurrentUser.Id;
}
}
}
我收到“在调用”WebSecurity“类的任何其他方法之前,必须调用”WebSecurity.InitializeDatabaseConnection“方法。此调用应放在站点根目录中的_AppStart.cshtml文件中。”尝试调用WebSecurity.CurrentUserId时出现错误消息。我在InitializeSimpleMembershipAttribute的OnActionExecuting中添加了断点,但断点从未命中。似乎InitializeSimpleMembership被忽略了。
我也在FilterConfig中添加了对InitializeSimpleMembershipAttribute的调用。 FilterConfig.RegisterGlobalFilters从Global.asax调用,这也没有帮助。
有什么想法吗?
答案 0 :(得分:3)
我将调用直接放在Global {asax.cx
中的Application_Start()
中
protected void Application_Start()
{
WebSecurity.InitializeDatabaseConnection("MembershipContext",
"WebUsers", "Id", "UserName", autoCreateTables: true);
// Other stuff from the template like AreaRegistration.RegisterAllAreas()
// etc.
}
工作正常。
您在网上找到的示例倾向于将该调用放在SimpleMembershipInitializer()
的构造函数中。在我的整体申请中,这对我没有用(虽然我不记得究竟是什么问题)。