ASP.Net MVC 4的SimpleMembership InitializeSimpleMembership未被调用

时间:2013-03-28 15:40:24

标签: authentication asp.net-mvc-4 oauth-2.0 simplemembership

我正在尝试让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调用,这也没有帮助。

有什么想法吗?

1 个答案:

答案 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()的构造函数中。在我的整体申请中,这对我没有用(虽然我不记得究竟是什么问题)。