我正在使用ASP.NET成员资格提供程序来处理当前站点上的所有成员资格活动。
我遇到了一个奇怪的问题。如您所知,如果您熟悉Asp.Net成员资格,则数据将存储在ProfileCommon中。
所以你可以使用ProfileCommon.UserId来获取用户ID。
这一切在我的生产服务器,我的登台服务器和本地开发服务器上的旧帐户上都能正常工作。
但是,如果我在本地开发服务器上创建新用户,则不会填充Profilecommon对象,并且它会引发错误,因为页面引用了例如ProfileCommon.UserId并且它为null,因此抛出异常。用户已通过身份验证,但未填充ProfileCommon。
有没有人对于为什么会发生这种情况有任何想法/建议?
编辑:这是我的web.config条目。我不知道为什么我们删除AspnetSqlProfileProvider然后添加它。这是我接手的网站,我对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>
谢谢!
答案 0 :(得分:2)
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>
答案 1 :(得分:1)
除了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>