1

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

有任何想法吗?

4

1 回答 1

3

Application_Start()我直接在 Global.asax.cx中拨打电话

protected void Application_Start()
{
    WebSecurity.InitializeDatabaseConnection("MembershipContext", 
        "WebUsers", "Id", "UserName", autoCreateTables: true);

    // Other stuff from the template like AreaRegistration.RegisterAllAreas()
    // etc.
}

这很好用。

您在网上找到的示例倾向于将该调用放在SimpleMembershipInitializer(). 在我的整个应用程序的上下文中,这对我不起作用(尽管我不记得到底是什么问题)。

于 2013-03-28T15:45:48.770 回答