Я получаю это исключение (в заголовке) всякий раз, когда пытаюсь получить идентификатор пользователя из сеанса (FormsAuthentication). Вот код метода:
public User GetUserFromSession()
{
int userId = int.Parse(_httpContext.User.Identity.Name); //this line throws the exception
IsNotNull(userId, "session user id");
var user = _userService.GetUserById(userId);
return user;
}
Когда я впервые добавляю идентификатор в сеанс, он добавляется в виде строки. Я попытался использовать Convert.Int32
и Convert.Int16
, но все равно получил то же исключение. Как я могу остановить это?
UPDATE:
Хорошо, я отладил проект и проверил значение _httpContext.User.Identity.Name
, и на самом деле это была пустая строка! Я не понимаю, почему это происходит, хотя ... Вот как я вхожу в систему пользователя:
var authTicket = new FormsAuthenticationTicket(
1,
user.Id.ToString(), //user id
DateTime.Now,
DateTime.Now.AddDays(30), // expiry
dto.RememberMe, //true to remember
"", //roles
"/"
);
//encrypt the ticket and add it to a cookie
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);
Разве это не должно делать работу? Или я что-то здесь упускаю ...
ОБНОВЛЕНИЕ 2:
Проверьте этот скриншот: http://i52.tinypic.com/2cnaw00.jpg
Как видите, свойство CurrentNotification говорит, что есть исключение. Может ли это быть реальным источником проблемы?
P.S: класс Helper принимает экземпляр HttpContext в своем конструкторе, вот как я передаю текущий контекст: x.For<HttpContext>().Use(HttpContext.Current);
(используя StructureMap).