我正在尝试开发一个"密码重置"功能。为了实现这一点,我在用户请求重置密码并将其作为电子邮件发送时生成一个guid,其中包含指向密码重置页面的链接,该链接具有guid作为查询字符串。 我写的代码如下:
Request.QueryString[BusinessLayerConstants.resetPasswordQueryString]) ? Request.QueryString[BusinessLayerConstants.resetPasswordQueryString] : String.Empty;
passwordCode = System.Web.HttpUtility.UrlDecode(passwordCode);
using (DBEntities entities = new DBEntities())
{
User = entities.AspNetUsers.FirstOrDefault(u => u.PasswordReset == passwordCode);
if (User != null)
{
//TODO
}
}
问题是,linq总是返回null。如果我使用相同的guid在数据库中运行SQL命令,我就能看到数据。并且passwordCode变量也获得了正确的值。我甚至检查过passwordCode是否有一些隐藏的字符,因为它来自查询字符串;但它也没关系。
我也使用这个完全相同的逻辑进行激活。我传递一个guid作为查询字符串,为了激活,我能够使用以下代码查找数据:
AspNetUser user = entities.AspNetUsers.FirstOrDefault(u => u.ActivationCode == activationCode);
它不适用于密码,我也尝试过使用.Equals()
和.Contains()
而没有运气。
如果有人知道可能出现的问题,我将不胜感激。感谢。
答案 0 :(得分:0)
请记住C#是区分大小写的,你应该这样做:
Request.QueryString[BusinessLayerConstants.resetPasswordQueryString]) ? Request.QueryString[BusinessLayerConstants.resetPasswordQueryString] : String.Empty;
passwordCode = System.Web.HttpUtility.UrlDecode(passwordCode);
using (DBEntities entities = new DBEntities())
{
User = entities.AspNetUsers.FirstOrDefault(u => u.PasswordReset.ToLower() == passwordCode.ToLower());
if (User != null)
{
//TODO
}
}