세션 (FormsAuthentication)에서 사용자 ID를 가져올 때마다 제목에서이 예외가 계속 발생합니다. 메소드의 코드는 다음과 같습니다.입력 문자열의 형식이 올바르지 않습니다.
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;
}
ID를 세션에 처음 추가하면 문자열로 추가됩니다. 나는 Convert.Int32
과 Convert.Int16
을 사용했지만 여전히 동일한 예외가 있습니다. 어떻게 그 일을 막을 수 있습니까?
업데이트 : 프로젝트를 디버깅 및 _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
UPDATE ... 여기에 뭔가를 놓친 거지 당신이 볼 수 있듯이 http://i52.tinypic.com/2cnaw00.jpg는 CurrentNotification 속성은 예외가 말한다 . 이것이 문제의 진정한 원인 일 수 있습니까?
P.S : Helper 클래스는 해당 생성자에서 HttpContext 인스턴스를 사용합니다. 이는 현재 컨텍스트 인 : x.For<HttpContext>().Use(HttpContext.Current);
(StructureMap 사용)을 전달하는 방법입니다.
_httpContext.User.Identity.Name은 실제로 정수입니까? 그것을 출력하고 어떻게 생겼는지보십시오. – alex
@alex, 그렇게 생각합니다. 디버깅을 중지하고 디버거를 다시 실행하면 세션이 거기에있게되고 정상적으로 로그인하게됩니다. – Kassem
@ 카센 : 아직도, 끈이 어떻게 보이는지 보셨습니까? 어쩌면 당신은 확실히 거기에 있으면 안되는 편지를 가지고있을 것입니다 ... – alex