Bir ASP.NET MVC 2 projesini başlattım ve otomatik olarak oluşturulan koddan çıkıyorum.Yeni oturum açmış bir kullanıcının profilini yeniden yönlendirmeden önce nasıl yüklerim
Karşılaştığım sorun, bir kullanıcı oturum açtıktan sonra, yeni giriş yapmış kullanıcının profilinin HttpContext
'a yüklenmediği, bu nedenle "Bu özellik" iletisiyle bir ProviderException
alacağıdır. mevcut kullanıcı profilinde bir özellik değeri ayarlamaya çalışırken anonim kullanıcılar için ayarlanamaz. SONRASI sadece LogOn eylem için
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
(ayrıca oluşturulan) tip FormsAuthenticationService
ait kumandanın bir özelliktir
[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.SignIn(model.UserName, model.RememberMe)
satırından sonra, yeni giriş yapmış hesap için bilginin denetleyici için hemen kullanılabilir olduğunu varsayıyordum, ancak bu durum böyle görünmüyor. Örneğin, FormsService # SignIn çağrısı altında profile.SetPropertyValue("MyProfileProperty", "test")
eklediyseniz, ProviderException
"Bu özellik anonim kullanıcılar için ayarlanamaz".
Yeni oturum açan kullanıcı profilini, HttpContext
içine nasıl yüklerim? Böylece, bir sonraki özelliğin öncesinde profilinde bir özellik değeri ayarlayabilir miyim?
Yeni bir profil oluşturacak, mevcut olanı yüklemeyecek. –
Hayır, var olan bir profili yükleyeceğini varsayarsanız yanılıyorsunuz. Denemek. –
"ProfileBase.Create() öğesinin argüman olarak bir kullanıcı adıyla çağrılmasının TableStorage'a karşı bir arama gerçekleştirdiğini ve gerçekte bu kullanıcı adıyla ilişkili verileri aldığını fark edene kadar biraz zaman harcadım. yanıltıcı, Load() veya Get(). Bu sorunun cevabını görmek için: http://stackoverflow.com/questions/1126719/asp-net-sql-profile-provider-does-the-profilebase-create-method-hit-db –