2016-10-31 146 views
1

可能是一個brainfart,但是,每當我嘗試驗證我的憑據在我的webform對廣告它總是返回true(已批准),爲什麼?這只是一個測試,以確保其工作每當我點擊「提交」按鈕:根據AD驗證憑據

protected void Button1_Click(object sender, EventArgs e) 
    { 
     string username1 = uniloginTextBox.Text; 
     string password1 = passwordTextBox.Text; 

     using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "cv.local")) 
     { 
      // validate the credentials 
      bool isValid = pc.ValidateCredentials(username1, password1, ContextOptions.Negotiate); 
     } 

     if (IsValid == true) 
     { 
      Label.Text = "approved"; 
     } 
     else if (IsValid == false) 
     { 
      Label.Text = "Denied"; 
     } 
+2

你正在檢查名爲'IsValid',而不是布爾'isValid'一些對象(一個始於資本,其他沒有),您可能不檢查無論如何因爲它不會在這種情況下存在。將'isValid'移動到use外面,默認情況下將其設置爲false,在'using'中設置它的值,然後用'Label1.Text = isValid? 「已批准」:「已拒絕」;' – Equalsk

+0

是的,isValid有一個小的我在使用塊內。只要塊結束,它就會死亡。 IsValid與大寫我是不同的東西。 –

回答

1

if語句檢查名爲IsValid一個對象的真值。您創建的bool被命名爲isValid。注意一個以大寫開頭,另一個不是。

布爾isValid將不會存在於您使用的塊之外,因爲它在裏面聲明。移動isValid外using語句是這樣的:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    // Username and password text 
    var username1 = uniloginTextBox.Text; 
    var password1 = passwordTextBox.Text; 

    // isValid defaults to false 
    bool isValid = false; 

    // Check credentials against AD 
    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "cv.local")) 
    { 
     // Set value for isValid 
     isValid = pc.ValidateCredentials(username1, password1, ContextOptions.Negotiate); 
    } 

    // Achieves the same as your if statement 
    Label.Text = isValid ? "Approved" : "Denied"; 
}