gpt4 book ai didi

c# - ASP.net 中的字符串比较 (C#)

转载 作者:太空狗 更新时间:2023-10-29 23:15:28 25 4
gpt4 key购买 nike

我正在编写连接 ASP.net Web 服务的 Android 应用程序 (C#,3.5)

android 应用程序将用户的“登录”信息发送到网络服务以验证用户是否已注册。

这是接收请求的[WebMethod]:

[WebMethod]
public SigninPerson signin(SigninPerson SIPerson)
{
SigninPerson Temp = new SigninPerson(0, "", "", "", "");
LinqToSQLDataContext DataBase = new LinqToSQLDataContext();
var Person = (from a in DataBase.Persons
where a.Email == SIPerson.E_Mail &&
a.Password.Equals(SIPerson.Password,StringComparison.Ordinal)
select new SigninPerson
{
Person_Id = a.Person_Id,
F_Name = a.First_Name,
L_Name = a.Last_Name,
E_Mail = a.Email,
Password = a.Password
});
if (Person.Any() == true)
{
Temp = Person.FirstOrDefault();
}
return Temp;
}

SigninPerson 是一个包含用户信息的类,如名字、姓氏、密码....

问题出在密码比较上。它接受了所有的案例

例如:

如果存储在数据库中的某人的密码是“ABD”,并且用户输入“abd”作为密码,应用程序接受了它! (不区分大小写!!!)

如何解决这个问题?

最佳答案

将您的 LINQ 更改为:

var Person = (from a in DataBase.Persons
where a.Email == SIPerson.E_Mail
select new SigninPerson
{
Person_Id = a.Person_Id,
F_Name = a.First_Name,
L_Name = a.Last_Name,
E_Mail = a.Email,
Password = a.Password
})
.ToList()
.Where(sp => sp.Password.Equals(SIPerson.Password));

这将通过 .NET 框架强制在客户端进行字符串比较,而不是在 SQL Server 的服务器端进行。


正如 andleer 所说,还有另一种方法可能更有效。现在,在实践中您不太可能看到这一点,但这是一个养成的好习惯。你实际上可以这样做:

var Person = (from a in DataBase.Persons
where a.Email == SIPerson.E_Mail
select new SigninPerson
{
Person_Id = a.Person_Id,
F_Name = a.First_Name,
L_Name = a.Last_Name,
E_Mail = a.Email,
Password = a.Password
})
.Take(1)
.AsEnumerable()
.Where(sp => sp.Password.Equals(SIPerson.Password));

应该确保它永远不会返回所有行,而只返回 1 行。同样,在这种实际情况下,它可能不那么相关,因为几乎肯定只会有一个 - 但它是不错的想法,值得一提。

关于c# - ASP.net 中的字符串比较 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com