asp.net2.0内建角色成员机制使用中的若干问题(如果以后类似问题将在此持续更新)

    技术2022-05-11  111

    自从上次初试asp.net2.0后,陆续遇到新的“问题”。慢慢积累吧。。。

    在项目中通过Web Site Admin Tool工具(菜单website--〉asp.net configuration)新建用户和角色,随便建了几个,在sql2k5里此项目的数据库中什么都用户、角色都没有。奇怪了,项目数据库名为morning2,已经通过aspnet_regsql.exe命令初始化了表结构了阿。往其他库里找,发现新加的用户和角色都在aspnetdb里,而aspnetdb是以前运行aspnet_regsql.exe默认生成的数据库。why???

    上次为了成功运行Personal starter kit建站,将machine.config中的连接字符串改了。详见前文 http://blog.csdn.net/quou2002/archive/2005/12/21/558494.aspx

    再看此项目中的web.config文件,连接字符串为<connectionStrings>   <add name="Personal" connectionString="Data Source=.;Integrated Security=True;Initial Catalog=Morning2" providerName="System.Data.SqlClient"/></connectionStrings>是啊!!!人家微软为什么要使用你定的名字---“Personal”呢??

    再想想上次的修改,难道是。。。。马上把web.config里的连接字符串改为:<connectionStrings>   <add name="Personal" connectionString="Data Source=.;Integrated Security=True;Initial Catalog=Morning2" providerName="System.Data.SqlClient"/>   <remove name="LocalSqlServer"/>   <add name="LocalSqlServer" connectionString="Data Source=.;Integrated Security=True;Initial Catalog=Morning2" providerName="System.Data.SqlClient"/></connectionStrings>

    ---ok。。。看来asp.net2.0中的角色成员管理,调用的连接字符串默认名必须为LocalSqlServer,如果web.config里没有定义,它会自动到machine.config里找,而在machine.config里有其默认值,上次我正是将其对应的数据库名改为默认名aspnetdb导致它把新加的用户加到了aspnetdb里。

    看来用人家的东西,就是“手软”啊!!!

    -------续:

    上次说到,连接字符串默认名必须是LocalSqlServer,原因是在machine.config里,关键是如下节:    <membership>      <providers>        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />      </providers>    </membership>

    看见高亮部分没,如果你自己的web.config里没有单独设定(覆盖)此节信息,那么成员服务就从这里找设置了。我们可以在不同项目里单独通过设定web.config来覆盖它的默认设定。还有,看见上面成员服务里其他的一些属性设定没?都可以如此这般。。。<呵呵,以前有人问:为什么我用Membership.CreateUser(userName, pwd)来建个用户会报错? 看见默认设定没---requiresQuestionAndAnswer="true",这就是原因了>

    ---------续:

     为什么有时自动多出了Administrators和Friends两个角色?

     有时莫名其妙出现上述问题,找了下msdn,找到了答案:

    原来我的这个项目是从Personal starter kit模版继承过来的,它的Global.asax文件里默认有如下代码: void Application_Start(object sender, EventArgs e) {  SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(AppendQueryString);  if (!Roles.RoleExists("Administrators")) Roles.CreateRole("Administrators");  if (!Roles.RoleExists("Friends")) Roles.CreateRole("Friends"); }

    不用多说了吧,呵呵。。。。


    最新回复(0)