私はASP.NET MVC 2プロジェクトを開始しました。私は自動的に生成されたコードを構築しています。リダイレクトの前に新しくログインしたユーザーのプロファイルをロードする方法
問題は、ユーザーがログインした後、新しくログインしたユーザーのプロフィールがHttpContext
に読み込まれていないように見えるため、ProviderException
に「このプロパティ現在のユーザーのプロファイルにプロパティ値を設定しようとすると、「匿名ユーザーに設定できません」というエラーメッセージが表示されます。
FormsService
タイプ
FormsAuthenticationService
(また、生成された)のコントローラの特性である
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
//...
:
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();
}
}
POST-ログオンのみ作用、ビジュアルWeb開発者2010 Expressは基本的に発生するため
FormsService.SignIn(model.UserName, model.RememberMe)
行の後、私は、新しくログインしたアカウントの情報がコントローラにすぐに利用できると仮定していましたが、これは当てはまりません。たとえば、FormsService#SignInの呼び出しの下にprofile.SetPropertyValue("MyProfileProperty", "test")
を追加すると、ProviderException
「このプロパティは匿名ユーザーに設定できません」というメッセージが表示されます。
HttpContext
に新しくログインしたユーザーのプロファイルを読み込むと、次のリクエストの前に自分のプロファイルにプロパティ値を設定できますか?
これは新しいプロファイルを作成し、既存のプロファイルをロードしません。 –
いいえ、間違っていると思います。既存のプロファイルが読み込まれます。やってみて。 –
"引数としてユーザー名を使用してProfileBase.Create()を呼び出すと、TableStorageに対してルックアップが実行され、実際にはそのユーザー名に関連付けられたデータが取得されることに気づくまでには時間がかかりました。私はLoad()またはGet()を期待しています。この質問への答えを見てください:http://stackoverflow.com/questions/1126719/asp-net-sql-profile-provider-does-the-profilebase-create-method-hit-db –