【问题标题】:ASP.NET Membership not populating new usersASP.NET 成员资格未填充新用户
【发布时间】:2009-08-10 20:18:56
【问题描述】:

我正在使用 ASP.NET 成员资格提供程序来处理我当前站点上的所有成员资格活动。

我遇到了一个奇怪的问题。如您所知,如果您熟悉 Asp.Net 成员资格,则数据存储在 ProfileCommon 中。

所以你可以通过 ProfileCommon.UserId 来获取用户 ID。

这一切都适用于我的生产服务器、暂存服务器以及本地开发服务器上的旧帐户。

但是,如果我在本地开发服务器上创建一个新用户,Profilecommon 对象不会被填充并且它会引发错误,因为页面引用 ProfileCommon.UserId 并且它为空,因此引发异常。用户已通过身份验证,但未填充 ProfileCommon。

是否有人对为什么会发生这种情况有任何想法/建议?

编辑:这是我的 web.config 条目。我不确定为什么我们删除 AspnetSqlProfileProvider 然后添加它。这是我接管的一个网站,我还不是 100% 熟悉 asp.net 会员资格。

  <profile defaultProvider="AspNetSqlProfileProvider">
  <providers>
    <remove name="AspNetSqlProfileProvider"/>
    <add name="AspNetSqlProfileProvider"
         type="System.Web.Profile.SqlProfileProvider" 
         connectionStringName="ConnectionString"/>
</providers>

实际的个人资料信息;

        <profile defaultProvider="SqlProfileProvider">
        <providers>
            <remove name="AspNetSqlProfileProvider"/>
            <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="FiftyMillionDBConnection"/>
        </providers>
        <properties>
            <add name="FirstName" type="String" serializeAs="String"/>
            <add name="LastName" type="String" serializeAs="String"/>
            <add name="EmailAddress" type="String" serializeAs="String"/>
            <add name="ScreenName" type="String" serializeAs="String"/>
            <add name="BirthDay" type="DateTime" serializeAs="String"/>
            <group name="Address">
                <add name="AddressLine1" type="String" serializeAs="String"/>
                <add name="AddressLine2" type="String" serializeAs="String"/>
                <add name="City" type="String" serializeAs="String"/>
                <add name="State" type="String" serializeAs="String"/>
                <add name="Zip" type="String" serializeAs="String"/>
            </group>
            <group name="PersonalInfo">
                <add name="Gender" type="String" serializeAs="String"/>
                <add name="Height" type="String" serializeAs="String"/>
            </group>
            <group name="OtherInfo">
                <add name="Agent" type="String" serializeAs="String"/>
                <add name="Employee" type="String" serializeAs="String"/>
                <add name="Source" type="String" serializeAs="String"/>
                <add name="EventRegistration" type="String" serializeAs="String"/>
            </group>
            <group name="AuthInfo">
                <add name="GUID" type="String" serializeAs="String"/>
                <add name="RegSource" type="String" serializeAs="String"/>
                <add name="ReceiveMail" type="String" serializeAs="String"/>
            </group>
        </properties>
    </profile>

谢谢!

【问题讨论】:

    标签: asp.net asp.net-membership


    【解决方案1】:

    web.config 中的 Profile 部分是否使用与 Membership 部分相同的 connectionStringName 值?这是我要检查的第一件事。

    编辑:您可以发布您的完整个人资料配置块吗?你应该有一些定义属性的东西,比如

    <profile enabled="true">
    
        <properties>
    
            <add name="UserId" type="Int32"/>
    
            <add name="Gender" type="string"/>
    
            <add name="Age" type="Int32"/>
    
        </properties>
    
    </profile>
    

    【讨论】:

    • 是的,相同的连接字符串。非常奇怪的是,这适用于暂存/生产,但不适用于本地。所以我总是害怕将任何东西推送到生产环境,因为这在本地不起作用。我想知道它是否是超时问题?
    • 好的。问题 2. 每个环境都有不同的 web.config 吗?还是在环境之间移动时只是编辑同一个 web.config 文件的连接字符串?
    • 我有不同的生产/登台/开发连接字符串,但没有不同的 web.configs。
    【解决方案2】:

    除了connectionStringName,您可能还需要仔细检查applicationName。如果它们不匹配,或者您在一个部分而不是另一个部分中定义了应用程序名称,您就会遇到问题。

       <membership defaultProvider="SqlProvider">
          <providers>
             <add name="SqlProvider"
              type="..."  
              connectionStringName="SomeConnString"
              applicationName="SomeApp"
              ...
              ... />
          </providers>
       </membership>
    
       <profile defaultProvider="ProfileProvider">
         <providers>
            <clear />
            <add name="ProfileProvider" 
                type="..." 
                applicationName="SomeApp"/>
         </providers>
         <properties>
            ...
         </properties>
      </profile>
    

    【讨论】:

    • 在哪里设置,我在 web.config 的任何地方都看不到该设置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多