Asp.net mvc 获取会员资格提供商';来自Web.Config的属性
我从Asp.net mvc 获取会员资格提供商';来自Web.Config的属性,asp.net-mvc,asp.net-membership,Asp.net Mvc,Asp.net Membership,我从System.Web.Security中的MembershipProvider派生了一个类,定义如下: public class RedditMembershipProvider : MembershipProvider { public RedditMembershipProvider() { } public override int PasswordAttemptWindow {
System.Web.Security
中的MembershipProvider
派生了一个类,定义如下:
public class RedditMembershipProvider : MembershipProvider
{
public RedditMembershipProvider()
{
}
public override int PasswordAttemptWindow
{
get { return 10; }
}
/* snip all the similar properties definition
*/
}
问题是我希望在实例化RedditMembershipProvider
时,所有属性都从web.config读取,而不是从上面的代码定义读取:
<membership defaultProvider="RedditMembershipProvider">
<providers>
<clear/>
<add name="RedditMembershipProvider"
type="RedditClone.Models.RedditMembershipProvider"
PasswordAttemptWindow=20
/>
</providers>
</membership>
因此,当我从视图调用PasswordAttemptWindow
时,应该得到20,而不是10。但现在我得到的是10分,而不是20分
你知道怎么解决这个问题吗?我真傻!我怎么会犯这样的错误呢 我只需要在我的代码中读取web.config就可以得到值
public override int PasswordAttemptWindow
{
get { ConfigurationManager.AppSettings["membership"].value; }
}
更简单的方法是从SqlMembershipProvider
继承RedditMembershipProvider
,并只覆盖必要的细节
public class YourMembershipProvider : MembershipProvider
{
public override void Initialize(string name, NameValueCollection config)
{
if (!String.IsNullOrEmpty(config["yourValue"]))
{
_yourValue = config["yourValue"];
}
base.Initialize(name, config);
}
string _yourValue;
public override string YourValue
{
get
{
return _yourValue;
}
}
...
}
编辑:输入错误。答案1是优雅的方式。例如,要读取属性
minRequiredPasswordLength
use
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) {
if (!String.IsNullOrEmpty(config["minRequiredPasswordLength"])) {
_minRequiredPasswordLength = Int32.Parse(config["minRequiredPasswordLength"]);
}
base.Initialize(name, config);
}
然后
public override int MinRequiredPasswordLength {
get { return _minRequiredPasswordLength; }
}