自定义ASP.NET MembershipProvider无法初始化问题求助
问题原因及解决方法
核心原因
ASP.NET的MembershipProvider是由框架负责实例化和初始化的,直接手动new实例的话,框架不会自动调用Initialize方法,导致你在该方法中准备的连接字符串未被赋值,调用CreateUser时自然报错。
正确解决步骤
通过框架获取Provider实例
不要手动实例化,而是使用框架提供的方式获取已初始化的Provider:// 若已将SiteUserProvider设为默认Provider var provider = Membership.Provider as SiteUserProvider; // 或通过名称指定获取 var provider = Membership.Providers["SiteUserProvider"] as SiteUserProvider; // 再调用CreateUser方法 provider.CreateUser(username, password, email, null, null, true, null, out status);确保web.config配置正确
必须在配置文件中注册自定义Provider,框架才能识别并完成初始化:<system.web> <membership defaultProvider="SiteUserProvider"> <providers> <clear/> <!-- 清除默认Provider --> <add name="SiteUserProvider" type="你的命名空间.SiteUserProvider, 你的程序集名称" connectionStringName="你的数据库连接字符串名称" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" applicationName="/" /> </providers> </membership> </system.web>手动初始化(不推荐)
若特殊场景下必须手动实例化,需自行调用Initialize方法传入配置参数:var provider = new SiteUserProvider(); var config = new System.Collections.Specialized.NameValueCollection(); config["connectionStringName"] = "你的连接字符串名称"; // 同步添加web.config中配置的其他参数 config["enablePasswordRetrieval"] = "false"; config["enablePasswordReset"] = "true"; // 执行初始化 provider.Initialize("SiteUserProvider", config); // 再调用CreateUser provider.CreateUser(...);这种方式绕开了框架的生命周期管理,可能引发潜在问题,仅作为临时方案使用。
内容的提问来源于stack exchange,提问作者TC_Guy
相关产品推荐
相关产品推荐

