私はasp.netメンバーシップにリンクしたい従来のユーザーID(int32)を持っています。私はデータベースにリンクテーブルを設定しました。私はその部分に満足しています。問題は、必要に応じて簡単にアクセスできるように、WebアプリケーションにUserIDを格納する場所です。asp.netメンバーシップで従来のユーザーIDを保存してアクセスする
私は、ログインコントロールのLoggedInイベントのFormsAuthenticationTicketのUserData部分に格納することをお勧めします。このアクセス可能にする私の最初の試みは、私のBasePageクラスのPreInitでそれを抽出することでした。この問題は、UserControlsでUserIDが必要なときに乱雑になるという問題があります。
public static int UserID
{
get
{
int userID = 0;
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
userID = Int32.Parse(ticket.UserData);
}
return userID;
}
}
これが動作しているようですが、私はいくつかの不文律を破っていた場合、私は知らない。
は、それが許容できるだけのユーティリティクラスの静的メソッドやプロパティでそれをラップするために、このようなものですここで支配する。私はこのすべてのものが記憶されていると推測するので、このアクセスに大きなオーバーヘッドはありません。
拡張メソッドはかなり新しくなっていますので、後で参考にするために少し読んだら - http://msdn.microsoft.com/en-us/library/bb383977.aspxを実行する必要がありました。それはいい見えます。残念ながら、彼らは拡張プロパティを持っていません(まだ)。ところで、エラー処理の追加以外に、どのような種類の "それを少しきれいにする"ということを覚えていましたか?私はそれが悪いとは思わなかった。 – Fruitbat
クリーンアップでは、 "is"の代わりに "as"を使用し、HttpContext.Current.Userを2回参照しないようにし、ParseではなくTryParseを使用します。 – RickNZ