Я запустил проект ASP.NET MVC 2 и собираю код, созданный автоматически.
Проблема, с которой я сталкиваюсь, заключается в том, что после того, как пользователь вошел в систему, кажется, что профиль вновь вошедшего в систему пользователя не загружен в HttpContext
, поэтому я получаю ProviderException
с сообщением «Это свойство нельзя установить для анонимных пользователей» при попытке установить значение свойства в профиле текущего пользователя.
Для действия входа в систему только для POST Visual Web Developer 2010 Express в основном сгенерировал:
[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
, чтобы я мог установить значение свойства в его профиле перед следующим запросом?