现在的位置: 首页 > 综合 > 正文

自定义ASP.net 2.0 Membership的步骤,和entry ‘AspNetSqlMembershipProvider’ has already been added错误的解决

2013年05月17日 ⁄ 综合 ⁄ 共 2430字 ⁄ 字号 评论关闭

自定义ASP.net 2.0 Membership的步骤,和entry 'AspNetSqlMembershipProvider' has already been added错误的解决

今天再新的系统里面用上了membership这个功能,虽然很久以前就对他了解很多了,但是苦于公司里面程序的局限性,一直都没有机会使用它。今天再新的程序里用上了,不过有一些东西微软虽然考虑了很多严谨的配置,却无形中给我们带来了很大麻烦。例如用户名密码必须是那种强命名方式 最简单的例子就是Pas$w0rd这个样子,使得程序员们开发和测试的时候都是很麻烦,还有很多用户还是很讨厌这种注册密码的方式。我自己就是一个受害者,分析了一下membership,看了看msdn,这些限制都是我们可以自己定义的。下面是如何自定义的方法和一个讨厌的错误解决办法。

1. 首先,到C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG 下找到machine.config文件,找到下面的这行配置 (当你找到他的时候,可能都写成一行了,自己回车修改成下面这种样式更利于阅读)
 <membership>
      <providers>
        <add name="AspNetSqlMembershipProvider"
             type="System.Web.Security.SqlMembershipProvider"
             connectionStringName="LocalSqlServer"
             enablePasswordRetrieval="false"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="true"
             applicationName="/"
             requiresUniqueEmail="false"
             passwordFormat="Hashed"
             maxInvalidPasswordAttempts="5"
             minRequiredPasswordLength="7"
             minRequiredNonalphanumericCharacters="1"
             passwordAttemptWindow="10"
             passwordStrengthRegularExpression="" />
      </providers>
</membership>

2.当你拿到这个membership的配置以后,下一步就是把它拷贝到你自己的web.config的<system.web>这个模块下面。这里需要稍微解释一下,默认情况下,asp.net 2.0就默认调用machine.config的membership配置,这也就是为什么你需要把这个配置拷贝到你自己的web.config下的原因,因为你要修改一些数值。

3. 好了开始大刀阔斧的"砍"吧.

 <membership>
      <providers>
        <add name="AspNetSqlMembershipProvider"
             type="System.Web.Security.SqlMembershipProvider"
             connectionStringName="LocalSqlServer"
             enablePasswordRetrieval="false"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="true"
             applicationName="/"
             requiresUniqueEmail="false"
             passwordFormat="Hashed"
             maxInvalidPasswordAttempts="5"
             minRequiredPasswordLength="4"
  
           minRequiredNonalphanumericCharacters="0"
             passwordAttemptWindow="10"
             passwordStrengthRegularExpression="" />
      </providers>
</membership>

(红色的部分就是我修改的),到了这里已经差不多大功告成了,但是先别高兴得太早,因为如果你这么运行就会出现一个错误"The entry 'AspNetSqlMembershipProvider' has already been added."如果你看到了这个,那么恭喜你,因为后面就是你要的答案。因为你在web.config里面重写membership的配置之后,asp.net还是先去运行machine.config里面的membership配置,等回来读到你的web.config的时候,asp.net engine就会糊涂了,因为有两个membership配置出现了。这就是为什么产生了这个错误。

好了废话少说,解决问题。一句话,两种办法都可以解决。
在 <add name="AspNetSqlMembershipProvider" 前面加上

<remove name="AspNetSqlMembershipProvider"/> 

或者

<clear/>

好了问题解决了

抱歉!评论已关闭.