ASP.NET MVC 2プロジェクトを開始し、自動的に生成されたコードから構築しています。
私が経験している問題は、ユーザーがログインした後、新しくログインしたユーザーのプロファイルがにロードされていないHttpContext
ように見えるため、ProviderException
「このプロパティは匿名ユーザーには設定できません」というメッセージが表示されることです。 "現在のユーザーのプロファイルにプロパティ値を設定しようとしたとき。
POSTのみのログオンアクションの場合、Visual Web Developer2010Expressは基本的に以下を生成します。
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
//...
ここFormsService
で、はタイプのコントローラーのプロパティですFormsAuthenticationService
(これも生成されます):
public class FormsAuthenticationService : IFormsAuthenticationService
{
public void SignIn(string userName, bool createPersistentCookie)
{
if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
}
public void SignOut()
{
FormsAuthentication.SignOut();
}
}
行の後FormsService.SignIn(model.UserName, model.RememberMe)
で、新しくログインしたアカウントの情報がコントローラーですぐに利用できると想定していましたが、そうではないようです。たとえば、profile.SetPropertyValue("MyProfileProperty", "test")
FormsService#SignInの呼び出しの下に追加すると、ProviderException
「このプロパティは匿名ユーザーには設定できません」というメッセージが表示されます。
HttpContext
新しくログインしたユーザーのプロファイルをにロードして、次のリクエストの前にそのユーザーのプロファイルにプロパティ値を設定できるようにするにはどうすればよいですか?