加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:00:57 所属栏目:asp.Net 来源:网络整理
导读:我正在编写与ASP.net Web服务连接的 Android应用程序(C#,3.5) android应用程序将用户的“登录”信息发送到Web服务,以验证用户是否已注册. 这是接收请求的[WebMethod]: [WebMethod]public SigninPerson signin(SigninPerson SIPerson){ SigninPerson Temp =
我正在编写与ASP.net Web服务连接的 Android应用程序(C#,3.5)

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

这是接收请求的[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是一个保存用户信息的类,如名字,姓氏,密码….

问题出在密码比较中.它接受了所有的案件

例如:

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

如何解决这个问题呢?

解决方法

将LINQ更改为:

var Person = (from a in DataBase.Persons
              where a.Email == SIPerson.E_Mail
              select new SigninPerson
              {
                  Person_Id = a.Person_Id,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,Password = a.Password
              })
              .Take(1)
              .AsEnumerable()
              .Where(sp => sp.Password.Equals(SIPerson.Password));

这应该确保它永远不会返回所有行,但只是1.再次,在这个实际情况下它可能不那么相关,因为几乎肯定只有一个 – 但这是一个很好的想法添加和值得注意.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读