在asp.net whidbey中,一个基本的目标是,在开发应用程序时,减少开发时间和代码量。为了达到这一目的,asp.net whidbey提供了一系列的新特征,例如无需代码的数据绑定,新的服务器端控件,尤其是,在这篇文章中要重点讨论的个人化(personalization)和成员角色(membership),来节省你的时间。
伴随着个人化和成员角色这两个新特征,第一步是要配置你用来存储个人化(personalization)和成员角色(membership)数据的提供者(provider)。虽然你可以自己创建access或sql server数据库,手动添加必要的配置元素,更简单的方法是使用asp.net web site administration tool,如图一。
图一
请注意,要成功的配置一个应用程序,你必须使用一个具有管理员权限的账号来登录。
要创建一个access的.mdb文件来储存personalization的数据,你需要打开asp.net web site administration tool。在一个叫data的文件夹下,会自动创建一个aspnetdb.mdb的文件。
图二
要配置membership的provider,你需要使用asp.net web site administration tool的security标签。最简单的方法是选择使用向导,如图三。
图三
在此刻,membership的数据库会被创建,必须的配置元素也会被加入到web.config文件中。你需要做的,只是把所有用户加入到数据库,设置限制的页,以及创建一个login页面。
很重要的一点是,你可以注意到,为personalization和membership创建的数据库是相同的,所以你可以使用同样的provider。
除了内嵌的access和sql server的providers,你可以创建自己定制的providers,然后使用这些providers来配置应用程序。也就是说,你如果有了一个以前的数据库,还是可以使用membership服务。
上面的都是理论方面的,接着我们来看一下实例。我会为各位读者展示使用access provider来配置personalization和membership,在membership数据库中添加一个用户,添加personalization的属性,在一个页面中使用这些属性,分别是匿名用户和已登录的用户。
首先要创建一个web站点,然后点击solution explorer窗口下的web site administration tool按钮。(见图二)
接着,点security标签,选择security setup wizard单选钮,并点next。第一步是很简单的信息,所以读一下,就可以选next。第二步,选择from the internet然后点next。"from the internet"是使用asp.net窗体验证来配置应用程序,"from a local area network"使用windows验证来配置应用程序。第三步,点next来使用web site administration tool已经自动创建的aspnetdb.mdb文件。接着点next跳过第四步。在第五步,因为有测试的目的,至少要加上一个用户。第六步是创建访问规则。最后,按finish退出向导。数据库已经建立,web.config文件也被自动创建,加入了web站点,里面包含了各种元素,文件如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionstrings>
<add name="webadminconnection631974613823397072"
connectionstring=
"c:\inetpub\wwwroot\aspnetpro_pm\data\aspnetdb.mdb"
/>
</connectionstrings>
<system.web>
<membership defaultprovider="aspnetdb">
<providers>
<add name="aspnetdb"
type="system.web.security.accessmembershipprovider,
system.web, version=1.1.3300.0, culture=neutral,
publickeytoken=b03f5f7f11d50a3a"
connectionstringname=
"webadminconnection631974613823397072"
applicationname="/aspnetpro_pm"
enablepasswordretrieval="true"
enablepasswordreset="true"
requiresquestionandanswer="true"
passwordformat="encrypted" />
</providers>
</membership>
<rolemanager defaultprovider="aspnetdb">
<providers>
<add name="aspnetdb"
type="system.web.security.accessroleprovider,
system.web, version=1.1.3300.0, culture=neutral,
publickeytoken=b03f5f7f11d50a3a"
connectionstringname=
"webadminconnection631974613823397072"
applicationname="/aspnetpro_pm" />
</providers>
</rolemanager>
<authentication mode="forms" />
</system.web>
</configuration>
如果要允许匿名用户访问你的站点,<anonymousidentification>元素是必需的。personalization部分包含两个属性,第一个属性,theme,并不指定一个类型,所以可以当作一个字符串对待。第二个属性,favoritecolors,指定了stringcollection类作为它的类型。在这个属性中,如果想要存储不兼容stringcollection类的数据,都会抛出异常。
<anonymousidentification enabled="true"/>
<personalization>
<profile>
<property name="theme" allowanonymous="true" />
<property name="favoritecolors"
type=
"system.collections.specialized.stringcollection"
allowanonymous="true"
serializeas="xml" />
</profile>
</personalization>
现在,我们了解了配置personalization和定义一个provider,现在是时候研究如何定义构成用户profile的value集了。你需要为你想存储的每个profile值添加一个<property>条目。事实上,你可以存储任何种类的对象,简单类型,字符串,布尔类型,或是复杂一点的,比如collections,甚至是自定义的类型。
<profile>
<property name="messagesperpage" type="int" />
</profile>
personalization系统支持更复杂的类型,例如collections。事实上,你可以存储任何序列化的对象。其实定义一个复杂的属性和定义一个简单的属性没有太大的差别。接下来的代码,包含了简单和复杂的属性的定义。
<personalization enabled="true" defaultprovider="access">
<providers>
<add name="access" type="… " connectionname="…" />
<add name="sql" type="… " connectionname="…" />
</providers>
<profile>
<property
name="emailaddresses"
type="system.collection.specialized.stringcollection"
serializeas="xml"
allowanonymous="false"
provider="sql"/>
<property name="messagesperpage" type="int" defaultvalue="25" />
</profile>
</personalization>
定义好了用户的profile后,就可以开始进行编码。page类包括一个profile属性,也是httppersonalizationbase的子类。它有如下的成员列表:
图四
在membership特征中,asp.net whidbey提供了很多的安全控件,下面是一个列表:
控件
功能
login
为站点定制了所有的登录功能,不需要任何代码
loginview
可以选择几种不同的模板
passwordrecovery
“忘记密码”的控件,用选择问题和答案来验证用户身份
loginstatus
显示用户登录的状态
loginname
能将登录的用户显示到页面上
我们举passwordrecovery控件为例:在页面添加一个passwordrecovery控件,html代码如下:
<form runat="server">
<asp:passwordrecovery id="passwordrecovery1" runat="server" font-
names="verdana" font-size="10pt" bordercolor="#999999"
borderwidth="1px" borderstyle="solid" backcolor="#ffffcc"
visible=true>
<titletextstyle font-bold="true" forecolor="#ffffff"
backcolor="#333399">
</titletextstyle>
</asp:passwordrecovery>
</form
为了能实现这个功能,我们需要手动在web.config中添加以下代码,指定smtp服务器,使之能发送email给用户。
<smtpmail
servername="localhost">
</smtpmail>
图五
我们可以看出,新一代的asp.net whidbey,控件已经做的非常完备,大大方便了程序员的开发效率,需要编写的代码越来越少了,让我们拭目以待吧!
