ASP.NET Whidbey中personalization和membership的一些特徵
最後更新:2017-02-28
來源:互聯網
上載者:User
asp.net 在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,控制項已經做的非常完備,大大方便了程式員的開發效率,需要編寫的代碼越來越少了,讓我們拭目以待吧!