同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 Profile 詳解之 ProfileModule 類

Profile 詳解之 ProfileModule 類

來源: | 時間:2011/4/9 9:02:20 |

Profile 類時用于用戶 Profile 的創(chuàng)建和 Profile 事件的管理的,

當(dāng)啟用用戶配置文件時,ASP.NET 使用 ProfileModule 來創(chuàng)建用戶配置文件,

并且將其存儲在當(dāng)前的 HttpContext 的 Profile 屬性中

public sealed class ProfileModule : IHttpModule

從這里的對 ProfileModule 的定義可以看出,

這個 ProfileModule 是實現(xiàn)了 IHttpModule 接口的,

同時其也是一個葉子類,也就是不允許繼承,

既然其實現(xiàn)了 IHttpModule 接口的話,那么它便可以攔截住任何的 Request ,

并且可以對這些攔截的 Request 進(jìn)行修改和控制后再傳遞給 ASP.NET 處理,

還有需要說明的就是這個 ProfileModule 還公開了三個事件

MSDN 中的說法是

ProfileModule 公開下面的事件,

您可以處理這些事件以在應(yīng)用程序中配置身份驗證:

MigrateAnonymous 事件,

       用于在匿名用戶登錄時將配置文件設(shè)置從匿名配置文件

       遷移到經(jīng)過身份驗證的配置文件。

Personalize 事件,用于自定義如何創(chuàng)建用戶配置文件。

ProfileAutoSaving 事件,

       用于在 AutomaticSaveEnabled 屬性設(shè)置為 true 時

       控制如何保存用戶配置文件。

上面的三個事件呢,其實有一個事件我在上一篇博文中已經(jīng)詳細(xì)的介紹了,

就是從匿名狀態(tài)轉(zhuǎn)換到登錄狀態(tài)時使用的事件 Profile_MigrateAnonymous ,

還有要提醒的就是上面的這三個事件都是創(chuàng)建在 Global.asax 中的,

分別對應(yīng)

Profile_MigrateAnonymous()

Profile_Personalize()

Profile_ProfileAutoSaving()

下面就來分別介紹一下

Profile_Personalize()和Profile_ProfileAutoSaving()這兩個事件

先來看 Profile_Personalize()事件吧

Personalize 事件的話,

是在 ASP.NET 獲取與當(dāng)前請求相關(guān)聯(lián)的當(dāng)前狀態(tài)(如會話狀態(tài))時發(fā)生,

Personalize 事件呢可以用來指定自定義的 Profile 用戶配置文件,

如果在 Personalize 事件結(jié)束時,傳遞給這個事件的參數(shù) args.Profile !=null 的話,

則 ProfileModule 類將使用這個 args.Profile

來作為當(dāng)前的 HttpContext 的 Profile 屬性的值,

在這里我想雖然我說了這么多,可是估計還是有很多人不懂,

那么我就這么說吧,直接說下面將要介紹的 Demo 的大致內(nèi)容,

比如,一個網(wǎng)站的用戶已經(jīng)有成千上萬了,如果,

我對單個的用戶都一一使用 Profile 進(jìn)行設(shè)置的話,

這個未免難了點,但是您可以通過角色來管理,

比如我的網(wǎng)站假設(shè)現(xiàn)在有 Admin ,SuperAdmin , User 三個角色,

如果我要分別對屬于這三個角色中的用戶登錄時,我要使用不同的 Profile ,

簡單點的就比如我要使用不同的背景顏色吧,

當(dāng)然,您可以在每一個用戶在 aspnet_Profile 用戶表中都給他添加一個背景顏色,

然后再在每當(dāng)用戶登錄時,都使用 Profile . 背景顏色 來讀取其存儲的顏色,

再修改頁面背景色,當(dāng)然,上面的這種方式是可以實現(xiàn)的,但是未免顯得太愚笨,

而且會造成數(shù)據(jù)庫開銷增加(

我舉的例子只是最簡單的一個背景色而已,

如果內(nèi)容更多的話,那數(shù)據(jù)庫會一下子激增的)

而我再換另外一種方法來試試看,就是使用 Role 來進(jìn)行管理,

我先對所有的用戶進(jìn)行分類,然后我在每次用戶登錄時

(會發(fā)出 Request 請求,這個可以被 ProfileModule 捕捉到)

都先在 Profile_Personalize 事件中使用其傳遞進(jìn)來的參數(shù) ProfileEventArgs args

來得到當(dāng)前發(fā)出請求的 UserName ,

然后就可以根據(jù)這個 UserName 來獲取其所屬的角色,

然后再在數(shù)據(jù)庫中針對其對應(yīng)的角色取出相對應(yīng)的 Profile 屬性值,

將其賦值給當(dāng)前的 Profile 對象的這個屬性

(也就是修改當(dāng)前的 Request ,修改完成后再將其交給 ASP.NET 處理),

然后再由 ProfileModule 類將這個屬性賦值給當(dāng)前的 HttpContext 的 Profile 屬性值,

這樣再在頁面上就可以直接通過 Profile 來讀取這個背景顏色了,

下面就來看針對這個 Profile_Personalize 事件的 Demo 吧

先看一些準(zhǔn)備工作吧,

為了簡單起見呢,我是用 ASP.NET 網(wǎng)站管理工具呢又往數(shù)據(jù)庫中添加了三個用戶

分別是 SuperAdmin , Admin , Users

并且為它們?nèi)齻€創(chuàng)建了 Profile

 

 

做好了準(zhǔn)備工作了就該來創(chuàng)建 Profile_Personalize 事件了

在 Global.asax 中創(chuàng)建

<%@ Application Codebehind="Global.asax.cs"

         Inherits="WebForm.Global" Language="C#" %>


<script RunAt="server">

   //這里在 Global.asax 中定義的 Personalize 事件
    void Profile_Personalize(object sender, ProfileEventArgs args)
    {
        ProfileCommon userProfile;
        if (User == null)
        {
            return;
        }
       //這里我只針對通過了身份驗證的用戶,其不包括匿名用戶
        userProfile = (ProfileCommon)ProfileBase.Create(User.Identity.Name, true);
        string[] userRoles = Roles.GetRolesForUser(User.Identity.Name);
        if (userRoles.Length > 0)
        {
            if (userRoles[0] == "SuperAdmin")
            {
                //從 Profile 中獲取 SuperAdmins 用戶的 Profile
                //作為當(dāng)前 Request 的 Profile                
                userProfile = userProfile.GetProfile("SuperAdmins");
            }
            else if (userRoles[0] == "Admin")
            {
                userProfile = userProfile.GetProfile("Admins");
            }
            else if (userRoles[0] == "User")
            {
                userProfile.GetProfile("Users");
            }           
            //下面就來解釋一下為什么會有 SuperAdmins ,Admins ,Users 這幾個用戶了
            //原因是我的網(wǎng)站中有三類角色,既然我要針對這三類角色進(jìn)行 Profile 的統(tǒng)一管理的話,
            //那么我應(yīng)該在數(shù)據(jù)庫中保存這三類角色的 Profile ,而上面的這三個用戶
            //實質(zhì)上并不是作為用戶使用的,而是作為存儲 Profile 使用的
            //就拿 SuperAdmins 來說吧,他的 Profile 代表了所有的 SuperAdmin 的 Profile
            //這樣就只需要保存一個 SuperAdmins 的用戶的 Profile ,而不需要再像以前那樣
            //要對每一個 SuperAdmin 角色中的用戶都獨自保存同一份 Profile 了
&nb

服務(wù)熱線

153 8323 9821

功能和特性

價格和優(yōu)惠

網(wǎng)站和維護(hù)

推廣和優(yōu)化

微信服務(wù)號