2009-05-04 18 views
0

私はいくつかのモデル(CreatedAt、UpdatedAt、CreatedBy、UpdatedByなど)で基本監査を実装しようとしています。モデルクラス内のユーザー名を取得する

日時部分が行われます。私は、プロパティが変更されたときに(INotifyPropertyChanging, INotifyPropertyChangedを実装する)私のモデルにイベントを投げています。通信のフィールドをうまく更新できます。

モデルの既存のインスタンスをインスタンス化または取得するたびに、コントローラを渡すことなく現在のユーザー名を取得する方法を知っておくだけで済みます。

答えて

2

のSystem.Webを参照して HttpContext.Current.User.Identity.Name を使用しては魅力のように働きました。

私はそれについて知りませんでした。ありがとう。 は、私はこのようにそれを行う:

Membership.GetUser().UserName 

高速ですどっち?

+0

はすでにのHttpContextに移入され、速くする必要があること。 –

+0

これは「ほとんど読まれた」アプリケーションなので大きな違いはありません。 – changelog

0

System.Webを参照し、HttpContext.Current.User.Identity.Nameを使用すると魅力的に機能しました。

2

アイデンティティについて語る抽象的な方法は、「プリンシパル」です。this threadを参照してください。私はこのコードを使用すると、ログインの実装について知ることなく、IDを取得することができますことを願っています:Userオブジェクトを考えると

public static class SomeUtilityClass { 
    public static string GetUsername() { 
     IPrincipal principal = Thread.CurrentPrincipal; 
     IIdentity identity = principal == null ? null : principal.Identity; 
     return identity == null ? null : identity.Name; 
    } 
} 
... 

record.UpdatedBy = record.CreatedBy = SomeUtilityClass.GetUsername(); 
+0

私はそれを指定し続けるつもりはないので、イベントのサブスクリプションとモデル自体でそれを行う方が効果的です。参考thoをありがとう。 – changelog

関連する問題