我在基于MVC2框架的项目中使用了带有OpenId实现的Membership API。 除了用户名之外,我还需要在注册时将一些其他字段与用户相关联。
我不确定但是我认为asp.net中的Profile系统是为这种类型的需求而构建的。另外,我看到一个包含名为'aspnet_profile'的其他成员资格表的表。
我在应用程序web.config中添加了以下设置以启用配置文件:
<profile enabled="true">
<properties>
<add name="FullName" allowAnonymous="false"/>
</properties>
</profile>
如前所述,应用程序需要一些额外的数据与用户相关联,因此在使用Membership API创建用户时,我添加了几行代码以进入配置文件表
System.Web.Security.MembershipCreateStatus status = MembershipService.CreateUser(userModel.UserName, userModel.Password, userModel.UserName);
if (status == System.Web.Security.MembershipCreateStatus.Success)
{
FormsService.SignIn(userModel.UserName, true);
Session["Username"] = userModel.UserName;
dynamic profile = ProfileBase.Create(MembershipService.GetUser(userModel.UserName).UserName);
profile.FullName = userModel.UserFullName;
profile.Save();
RedirectToAction("Tech", "Home");
}
但是我没有看到数据库中的aspnet_profile表中添加了任何行。另外,我想询问这是否是添加其他数据以及默认成员资格数据的首选方式
答案 0 :(得分:4)
我通过在web.config中进行与默认配置文件提供程序名称相关的一些更改来实现它:
<profile enabled="true" defaultProvider="AspNetSqlProfileProvider">
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" applicationName="/" connectionStringName="ApplicationServices" type="System.Web.Profile.SqlProfileProvider" />
</providers>
<properties>
<add name="FullName" allowAnonymous="false"/>
</properties>
</profile>
此外,我在调用ProfileBase.Create函数和设置Profile.FullName之间又增加了一行;
profile.Initialize(userModel.userName, true);
我终于在aspnet_profile表中看到了一个新注册用户的条目:)
答案 1 :(得分:1)
1,您需要创建一个配置文件类来定义配置文件结构
2,您需要在web.config中将配置文件设置配置为
3,现在您可以立即使用您的代码了。
在使用之前,您只需要执行前两个步骤。
参考:http://weblogs.asp.net/jgalloway/archive/2008/01/19/writing-a-custom-asp-net-profile-class.aspx
答案 2 :(得分:1)
使用ASP.NET配置文件提供程序时,profile properties是自定义用户配置文件的方法。但是,您不必自己创建和保存配置文件实例 - 它由ASp.NET运行时自己完成。使用HttpContext.Current.Profile或从页面中使用强类型动态Profile
属性。通过稍后使用,您可以编写诸如
Profile.UserName = "User Name";
无需调用Save
方法。有关更多信息,请参阅this article。
在Web应用程序中,实际上无法引用动态创建的Profile类,因此您必须使用HttpContext.Current.Profile
(您当然可以将其分配给dynamic
变量以获得更易读的代码由你)。另一种方法是写your own class。