2011-05-11 6 views
0

개체를 사용하여 데이터베이스의 내용을 검색하고 하나의 필드 만 반환하고 SHA1로 해시 된 문자열과 비교합니다.ASP.NET 4 : 개체와 문자열의 결과 집합을 비교하십시오.

protected void Onbutton_click_login(object sender, System.EventArgs e) 
    { 
     var dbcontext = new PrepLicensingSolution2010.DAL.LicensingEntities1(); 
     var user = dbcontext.getloginname(loginName.Text); 
     string HashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Text, "sha1"); 

     if (user.ToString() == HashedPassword) 
     { 
      Response.Redirect("faqs.aspx"); 

     } 

     else 
     { 

      Response.Redirect("Default.aspx"); 
     } 

    } 

I 중단 점을 넣어 플로우의 각 단계에서의 데이터 세트 오브젝트 결과 및 문자열의 데이터를 체크 심지어 다음 실패 조건 경우 동일한되지만, 다음과 같은 코드는 Breakpoint information

whats interesting은 모두 typ 비교되는 문자열 형식과 값이 같기 때문에 리디렉션이 default.aspx 페이지로 이동하는 이유는 무엇입니까?

이미지가 중단 점

의 데이터를 모든 입력이 좋은 것입니다 포함되어 있습니다. 스크린 샷을 바탕으로

감사

+0

케이스가 정확히 동일합니까? – keyboardP

+0

예, 스크린 샷을 보면 글자, 숫자 및 대소 문자가 같기 때문에 나는 그걸 확인해 보았습니다 –

답변

2

user.ToString() 문자열 {System.Data.Objects.ObjectResult<string>}을 반환 할 보인다. 이것은 물론 해시 된 암호와 동일하지 않습니다.

getloginname 호출의 결과는 단일 문자열 자체가 아닌 단일 문자열을 포함하는 문자열 시퀀스입니다. ToString()의 기본 구현은 단순히 클래스 이름을 반환하며 스크린 샷의 '사용자'행에 대한 값 열에서 확인할 수 있습니다. 조건문을 다음과 같이 변경하면 문제가 해결됩니다.

if (user.FirstOrDefault() == HashedPassword) 
+0

완벽하게 작동했습니다. 감사 ! –

관련 문제