.net 没有字符串比较方法有效

.net No strings comparison methods are working

好吧,我一直在尝试构建一个简单的登录(没有那么复杂),一切正常,但不是您需要比较数据库结果和用户输入的部分。 问题是:

if (item.user == User && item.password == Password) {
  itExists = true;
  break;
}

item.usuario 工作正常,用户输入也正确保存,我知道这一点,因为当我尝试与此进行比较时:

if (item.user.Contains(User) && item.password.Contains(Password)) {
  itExists= true;
  break;
}

它工作“很好”,“包含”的问题是当用户键入单个字母时(例如,假设在数据库中,user/password 是 admin/admin 并且用户types a/a) 它会让他登录,因为“a”包含在“admin”中

所以,我搜索了几乎所有的比较方法,并尝试了这个:

// Isn't working directly. ToString(item.user) == Convert.ToString(User) && Convert.ToString(item.password) == Convert.ToString(Password)
                // Isn't working directly. item.user== User && item.password == Password
                // Isn't working directly. item.user.Equals(User) && item.password.Equals(Password)
                // Isn't working directly. String.Equals(item.user, User) && String.Equals(item.password, Password)
                // Is working, but if u write a single letter that is in the string,
                // It let u sign in. item.user.Contains(User) && item.password.Contains(Password) 

我知道这些不起作用,因为使用 .Contains() 它可以让您使用正确的 user/password 登录,但问题我已经告诉

我想知道为什么会这样,然后怎么办。

每个变量包含:

完整的控制器代码在这里:

public ActionResult Index(string User, string Password) {
        var UsersList= db.Users;
        bool itExists= false;
        foreach (var item in UserList) {
            if (item.user.Contains(User) && item.password.Contains(Password)) {
               itExists= true;
               break;
}}

(我想我已经很好地解释了自己,如果我没有解释,请见谅)

提前谢谢你:)

编辑:如果重要的话,我正在使用 ASP.NET (.Net Framework 4.7.2)

对于密码,您应该使用“==”比较。用户发送的密码应与数据库中的密码完全匹配(顺便说一下,您应该使用哈希而不是实际密码,但这不是这里的问题)。

对于用户名,您可以更灵活(例如,用户可能会使用大写字母或在后面添加空格 space),因此您应该注意这一点:

item.usuario.Trim().Equals(User, StringComparison.CurrentCultureIgnoreCase);

使用 Trim() 您将删除所有白色space before/after 并且 Equals 参数将确保比较不区分大小写。

您还应该trim“用户”如果在将其添加到数据库之前没有做什么。

您还应该为每个使用 LINQ 而不是 a :

var trimmedUserName = item.usuario.Trim();
var exists = UserList.Any(u => trimmedUserName.Equals(User, 
StringComparison.CurrentCultureIgnoreCase) && item.password == Password);

我相信您知道,但使用“.Contains”将是一个巨大的安全问题。

我认为你应该重新安排你的 Index 方法。

  public ActionResult Index(string User, string Password) {
     var dbUser = _db.Users
        .FirstOrDefault(u => u.UserName == User && u.password == Password);

     if(dbUser != null)
        itExists = true;
     
     return Ok(itExists);
  }}