我已经阅读了所有相关的问题,但是由于某些原因我仍然无法得到正确的解决方案,但是有些事情并不在我身边,但不能确定是什么原因造成的。
我已经创建了一个自定义会员提供商,也将我的web.config更改为:
- <membership defaultProvider="MyMemberShipProvider">
- <providers>
- <clear />
- <add name="MyMemberShipProvider"
- type="MyNameSpace.MyMemberShipProvider"
- connectionStringName="ApplicationServices"
- enablePasswordRetrieval="false"
- enablePasswordReset="true"
- requiresQuestionAndAnswer="false"
- requiresUniqueEmail="false"
- passwordFormat="Hashed"
- maxInvalidPasswordAttempts="5"
- minrequiredPasswordLength="6"
- minrequiredNonalphanumericCharacters="0"
- passwordAttemptWindow="10"
- passwordStrengthRegularExpression=""
- applicationName="MyApplication" />
- </providers>
- </membership>
- public override void Initialize(string name,NameValueCollection config)
- {
- if (config == null)
- { throw new ArgumentNullException("config"); }
- if (string.IsNullOrEmpty(name))
- { name = "MyMemberShipProvider"; }
- if (string.IsNullOrEmpty(config["description"]))
- {
- config.Remove("description");
- config.Add("description","My Membership Provider");
- }
- base.Initialize(name,config);
- _applicationName = GetConfigValue(config["applicationName"],System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
- _maxInvalidPasswordAttempts = Convert.ToInt32(GetConfigValue(config["maxInvalidPasswordAttempts"],"5"));
- _passwordAttemptWindow = Convert.ToInt32(GetConfigValue(config["passwordAttemptWindow"],"10"));
- _minrequiredNonAlphaNumericCharacters = Convert.ToInt32(GetConfigValue(config["minrequiredAlphaNumericCharacters"],"1"));
- _minrequiredPasswordLength = Convert.ToInt32(GetConfigValue(config["minrequiredPasswordLength"],"7"));
- _passwordStregthRegularExpression = Convert.ToString(GetConfigValue(config["passwordStrengthRegularExpression"],String.Empty));
- _enablePasswordReset = Convert.ToBoolean(GetConfigValue(config["enablePasswordReset"],"true"));
- _enablePasswordRetrieval = Convert.ToBoolean(GetConfigValue(config["enablePasswordRetrieval"],"true"));
- _requiredQuestionAndAnswer = Convert.ToBoolean(GetConfigValue(config["requiresQuestionAndAnswer"],"false"));
- _requiredUniqueEmail = Convert.ToBoolean(GetConfigValue(config["requiresUniqueEmail"],"true"));
- string temp_format = config["passwordFormat"];
- if (temp_format == null)
- {
- temp_format = "Hashed";
- }
- switch (temp_format)
- {
- case "Hashed":
- _passwordFormat = MembershipPasswordFormat.Hashed;
- break;
- case "Encrypted":
- _passwordFormat = MembershipPasswordFormat.Encrypted;
- break;
- case "Clear":
- _passwordFormat = MembershipPasswordFormat.Clear;
- break;
- default:
- throw new ProviderException("Password format not supported.");
- }
- ConnectionStringSettings _connectionStringSettings = ConfigurationManager.ConnectionStrings[config["connectionStringName"]];
- if (_connectionStringSettings == null || _connectionStringSettings.ConnectionString.Length == 0)
- {
- throw new ProviderException("Connection String Cannot Be Blank.");
- }
- _connectionString = _connectionStringSettings.ConnectionString;
- //Get Encryption and Decryption Key Information From the Information.
- System.Configuration.Configuration cfg = WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
- _machinekey = cfg.GetSection("system.web/machineKey") as MachineKeySection;
- if (_machinekey.ValidationKey.Contains("AutoGenerate"))
- {
- if (PasswordFormat != MembershipPasswordFormat.Clear)
- {
- throw new ProviderException("Hashed or Encrypted passwords are not supported with auto-generated keys.");
- }
- }
- }
我已经注意到,Initialize方法没有被调用,我读过这里的问题,人们说我不用手动调用,如果我正确地连接了web.config,我不必做任何东西,但我尝试手动调用,但它给我一个InvalidCastException当我试图转换NameValueCollection。
有人可以帮我吗谢谢