【问题标题】:How to Initialize SimpleMembershipProvider?如何初始化 SimpleMembershipProvider?
【发布时间】:2012-12-18 20:57:46
【问题描述】:

我想访问SimpleMembershipProvider 的全部功能,例如ValidateUser 方法。

因此,根据其documentation,我不应该调用WebSecurity.InitializeDatabaseConnection() 进行初始化,而是启用标准成员资格和角色提供程序。

我的问题是:如何初始化 SimpleMembershipProvider 类

到最后:可以访问SimpleMembershipProvider的全部功能

或者如果有更好的解决方案,谢谢

【问题讨论】:

    标签: asp.net sql-server asp.net-mvc asp.net-membership database-connection


    【解决方案1】:

    如何初始化 SimpleMembershipProvider 类

    如果您查看默认的 ASP.NET MVC 4 Internet 应用程序模板,AccountController 会使用[InitializeSimpleMembership] 属性进行修饰。这就是它在此示例中的初始化方式。这意味着一旦通过帐户控制器,您就可以使用它,而不是之前。如果您想在进行身份验证之前使用您的会员提供商,您可以在 Application_Start 方法中执行相同的操作。

    【讨论】:

    • 它不只是WebSecurity.InitializeDatabaseConnection() 的精美包装吗?
    • 不,不是。如果您查看此属性的源代码,它的作用远不止初始化成员资格提供程序。如果数据库不存在,它也会创建数据库。
    • 呃抱歉,我不明白。 所有功能是什么意思?所有能力与什么相比?经典的 SQL 成员资格提供程序?如果是这样,那么是的,你不应该使用它,而是使用经典的。
    • @Darin,正如 IliaG 所说,它在这里使用它:WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
    • 是的,有什么问题?
    【解决方案2】:

    如果您要将InitializeSimpleMembershipAttribute 合并到Global.asax.cs Application_Start 中,这样SimpleMembershipProvider 将被初始化而不会调用任何AccountController 路由...

    ...它可能看起来像这样:http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership-users-passwords.html

    // The using below is needed for "UsersContext" - it will be relative to your project namespace
    using MvcApplication1.Models;
    
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Threading;
    using System.Web.Http;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    using WebMatrix.WebData;
    
    namespace MvcApplication1
    {
        // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
        // visit http://go.microsoft.com/?LinkId=9394801
    
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                WebApiConfig.Register(GlobalConfiguration.Configuration);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                AuthConfig.RegisterAuth();
    
                // Ensure ASP.NET Simple Membership is initialized only once per app start
                LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
            }
    
            private static SimpleMembershipInitializer _initializer;
            private static object _initializerLock = new object();
            private static bool _isInitialized;
    
            private class SimpleMembershipInitializer
            {
                public SimpleMembershipInitializer()
                {
                    Database.SetInitializer<UsersContext>(null);
    
                    try
                    {
                        using (var context = new UsersContext())
                        {
                            if (!context.Database.Exists())
                            {
                                // Create the SimpleMembership database without Entity Framework migration schema
                                ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                            }
                        }
    
                        WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 那篇文章是最好的“如何做”之一。谢谢
    猜你喜欢
    • 2012-09-30
    • 2019-05-17
    • 2017-11-02
    • 1970-01-01
    • 2014-01-22
    • 2018-11-15
    • 2015-05-14
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多