2011-05-11 82 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"); 
     } 

    } 

我把斷點和檢查在流動的每個階段中的數據,並在設定的對象結果和在串中的數據是相同的,但即使是這樣的條件如果失敗 Breakpoint information

什麼是有趣的是既典型被比較的字符串類型和相同的值,那麼爲什麼重定向進入default.aspx頁面。

圖像包含來自斷點的數據

任何輸入都會很好。

感謝

+0

套管是否完全一樣? – keyboardP 2011-05-11 21:00:04

+0

是的,如果你看截圖他們的信件,數字和外殼都是一樣的,我會仔細檢查那 – 2011-05-11 21:07:22

回答

2

基礎上的截圖,user.ToString()看起來是返回字符串{System.Data.Objects.ObjectResult<string>}。這當然不等於散列密碼。

您的問題是您的getloginname調用的結果是包含單個字符串的字符串序列,而不是單個字符串本身。 ToString()的默認實現只是返回類名稱,您可以在屏幕截圖中的「用戶」行的值列中看到它。將您的條件聲明更改爲以下內容應修復此問題:

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

真棒,完美的工作!謝謝 ! – 2011-05-12 16:27:17