Я запустил проект 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
"Это свойство не может быть установлено для анонимных пользователей ».
Как мне загрузить только что вошедшего пользователя ' s профиль в HttpContext
, чтобы я мог установить значение свойства в его или ее профиле перед следующим запросом?