2016-11-30 18 views
0

我正在用asp.net構建一個項目,而我對此很感興趣。 我創建了一個列表,每個值在我的控制器中有2個字符串。我想構建一個登錄頁面,檢查登錄頁面輸入(名稱,密碼)中的字符串是否與列表中的字符串相同(我試圖創建不帶db的登錄)。在我的模型中,我已經寫了一個類與字符串密碼和名稱。 如何在列表中添加一個函數,並將參數與用戶的輸入進行比較?如何比較函數中的列表字符串參數與登錄輸入(名稱,通行證)?

任何幫助將不勝感激。謝謝。

控制器

static List<KeyValuePair<string, string>> users = new List<KeyValuePair<string, string>> 
     { 
      new KeyValuePair<string, string>("dennis", "pass"), 
      new KeyValuePair<string, string>("kap", "111111") 
      // how to search in a list 
     }; 

型號

public class Login 
    { 
     [Required] 
     [Display(Name = "שם משתמש")] 
     public string userName { get; set; } 
     [Required] 
     [Display(Name = "סיסמא")] 
     public string userPass { get; set; } 


    } 
+0

這豈不是更容易使用'詞典<字符串,字符串>'?然後你可以用'users.Add(「dennis」,「pass」)添加到詞典中;' –

+0

'Dictionary '可能比使用鍵值對更容易。 Dictionary提供了一個'.ContainsKey'方法以及通過鍵索引。 –

+0

@AlfieGoodacre我正在學習,謝謝 – tanyaa

回答

0

這裏是你可以嘗試https://dotnetfiddle.net/的工作代碼。

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Program 
{ 
    public class Login 
    { 
     public string userName { get; set; } 
     public string userPass { get; set; } 
    } 

    static List<KeyValuePair<string, string>> users = new List<KeyValuePair<string, string>> 
     { 
      new KeyValuePair<string, string>("dennis", "pass"), 
      new KeyValuePair<string, string>("kap", "111111") 
     }; 

    public static void Main() 
    { 
     Login testLogin = new Login(); 
     testLogin.userName = "dennis"; 
     testLogin.userPass = "pass";  
     bool isValidUser = users.Any(user => user.Key == testLogin.userName && user.Value == testLogin.userPass); 
     Console.WriteLine(isValidUser); 
    } 
} 

作爲一個便箋,對我來說,使用用戶名和密碼字段的'LoginInformation'對象會更直觀。另外,我假設你明白你在做什麼是絕對不安全的。密碼必須經過散列和醃製。

編輯:這是檢查代碼移出到它自己的方法:

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Program 
{ 
    public class Login 
    { 
     public string userName { get; set; } 
     public string userPass { get; set; } 

     public bool isUserNameValid(string userName, string userPass, List< KeyValuePair<string, string> > validUsers) 
     { 
      return validUsers.Any(user => user.Key == userName && user.Value == userPass); 
     } 
    } 

    static List<KeyValuePair<string, string>> users = new List<KeyValuePair<string, string>> 
     { 
      new KeyValuePair<string, string>("dennis", "pass"), 
      new KeyValuePair<string, string>("kap", "111111") 
     }; 

    public static void Main() 
    { Login login = new Login(); 
     bool isValidUser = login.isUserNameValid("dennis", "pass", users); 
     Console.WriteLine(isValidUser); 
    } 
} 
+0

謝謝我現在就試試!所有這些我只需要在模型中寫入權利? – tanyaa

+0

Np。但我不明白這個問題。您應該能夠將上面的代碼複製並粘貼到jsfiddle中,並且它應該「正常工作」。與您相關的行從「isValidUser」開始 - 這就是檢查發生的地方。如果需要,您可以將其移入單獨的功能。您可以在實際代碼中的任何位置接收登錄信息。 – VSO

+0

我們可以聊聊嗎? – tanyaa

0

如何沿着

if (users.Where(kvp => kvp.Key == userName && kvp.Value == userPAss).Any()) 
    LoginOK(); 

PS線的東西:沒有dB的登錄可能會非常棘手。如果所有登錄信息都存儲在內存中,則如果站點必須重新啓動,則所有用戶登錄都將被刪除。

+0

請注意,這需要使用System.Linq,因爲它尚未在 –

+0

謝謝你!是的,我知道它將被刪除它的工作分配,他們說沒有db – tanyaa

+0

如何在actionResult函數中插入參數? – tanyaa