authcookieを使用して文字列を保存できます。この文字列は、必要なすべてのデータをエンコードできます。私は通常、保存したいすべての情報を持つオブジェクト(ConnectedUserクラスなど)を作成します。次に、クラスのToString()をオーバーライドして、後でデコードしてConnectedUserインスタンスを再構築できる形式の文字列を返します。これは、すべてのモデルが単一のベースモデルから継承し、ベースモデルがConnectedUserタイプのプロパティを持つことができ、DefaultModelBinderを拡張し、OnModelUpdated()をオーバーライドして、接続されたユーザーのインスタンスを再構築する場合にさらに簡単になります。通常、これはrequestcontextを受け入れるメソッドを介して行います。たとえば、何らかの理由でmodelbinderが呼び出されていない場合は、コード内の他の場所から呼び出すことができます。
編集
public class ConnectedUser{
public string FirstName{get;set;}
public string LastName{get;set;}
public override string ToString(){
return string.format("FirstName{0}{1}{2}LastName{0}{3}",EqualDelimiter, FirstName, EntryDelimiter, LastName);
}
}
そして、userIdを渡す代わりに、Auth cookieのコンストラクターで、FirstNameとLastNameが入力されたConnectedUserのインスタンスを渡します。リクエストを受信すると、これら2つのメソッドを使用して接続されたユーザーを取得できます。 defaultModelBinderのカスタム拡張またはアクションメソッド内など。
public static ConnectedUser GetConnectedUser(HttpContextBase executingContext)
{
var dictionary = GetAuthCookieData(executingContext);
var toRet = new ConnectedUser
{
FirstName = dictionary["FirstName"],
LastName= dictionary["LastName"]
}
return toRet;
}
public static IDictionary<string, string> GetAuthCookieData(HttpContextBase executingContext)
{
HttpCookie toCheck = executingContext.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket decrypted = FormsAuthentication.Decrypt(toCheck.Value);
string userData = decrypted.UserData;
return userData.ToDictionary<string, string>();
}
DefaultModelBinderの拡張は簡単ですが、Global.asaxに登録することを忘れないでください。両方を行う方法については、オンラインでたくさんの記事があります。