检查数据库中的现有记录时出现意外行为

J威齐

我有一个带有 Ember 前端(在 VSCode 中创建)的 ASP.NET CORE 2.1 API 后端。我正在关注 Embercasts 的在线视频教程以进行新用户注册。检查重复用户的逻辑工作不正常:

if (context.Users.Where(u => u.Username.Equals((string) value, StringComparison.OrdinalIgnoreCase)).Count() > 1)
{
     return new ValidationResult("Username is already taken", new [] { "Username" });
}

出于某种原因,上面的代码允许在报告重复用户之前正好有一个重复用户。换句话说,没有达到返回新的 ValidationResult 提醒用户重复记录的代码。我认为这可能与一些奇怪的数组索引问题有关,其中第一条记录位于位置 0。在测试该假设后,我被证明是正确的。以下代码可防止重复,同时仍允许创建一条记录:

if (context.Users.Where(u => u.Username.Equals((string) value, StringComparison.OrdinalIgnoreCase)).Count() > 0)
{
     return new ValidationResult("Username is already taken", new [] { "Username" });
}

有谁知道为什么会这样?任何帮助表示赞赏。

LibraryApi\Model\User.cs

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using JsonApiDotNetCore.Models;

namespace LibraryApiNew.Models
{
    public class User : Identifiable
    {
        [Attr("email"), UniqueEmail, Required(AllowEmptyStrings = false)]public string Email {get; set; }
        [Attr("username"), UniqueUsername, Required(AllowEmptyStrings = false)]public string Username { get; set; }
        [Attr("password"), NotMapped, Required(AllowEmptyStrings = false), Compare("PasswordConfirmation")]public string Password { get; set; }
        [Attr("password-confirmation"), NotMapped, Required(AllowEmptyStrings = false)]public string PasswordConfirmation { get; set; }
        public string PasswordHash { get; set; }
    }

    public class UniqueUsername : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var context = (AppDbContext) validationContext.GetService(typeof(AppDbContext));

            if (context.Users.Where(u => u.Username.Equals((string) value, StringComparison.OrdinalIgnoreCase)).Count() > 0) // Why?
            {
                return new ValidationResult("Username is already taken", new [] { "Username" });
            }

            return ValidationResult.Success;
        }
    }

    public class UniqueEmail : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var context = (AppDbContext) validationContext.GetService(typeof(AppDbContext));

            if (context.Users.Where(u => u.Email.Equals((string) value, StringComparison.OrdinalIgnoreCase)).Count() > 0) // Why?
            {
                return new ValidationResult("Email is already taken", new [] { "Email" });
            }

            return ValidationResult.Success;
        }
    }
}
马可

您的代码与用户注册有关,并且 if 子句context.Users.Where(u => u.Username.Equals((string) value, StringComparison.OrdinalIgnoreCase)).Count() > 0确实检查用户名是否已经存在。

如果存在,创建第二个将创建一个副本,因此错误消息“用户名已被占用”。

如果计数为 0,则仅表示该名称尚未被采用且可以使用并且验证成功。

现在你会检查> 1,那意味着,你愿意允许一个重复

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在python中修改字典时出现意外行为

来自分类Dev

javascript - 使用表 JS 库时出现意外行为

来自分类Dev

当URL中没有尾部斜线时,使用VueJS单页进行Django路由会出现意外行为

来自分类Dev

传递异步操作时出现意外行为

来自分类Dev

导入软件包时出现意外行为

来自分类Dev

创建字典时出现意外行为

来自分类Dev

从istringstream读取字符时出现意外行为

来自分类Dev

在Python中加载模块时出现意外行为

来自分类Dev

使用strcat附加字符时出现意外行为

来自分类Dev

使用重定向操作时出现意外行为

来自分类Dev

从 stdin 读取输入参数时出现意外行为

来自分类Dev

当对文件中的字符使用迭代器时,scala中出现意外行为

来自分类Dev

在R中匹配'+'时在pmatch中出现意外行为

来自分类Dev

在R中匹配'+'时在pmatch中出现意外行为

来自分类Dev

尝试在连续请求中更新数据库时发生意外行为-EF 6

来自分类Dev

Laravel,语法错误,尝试从数据库中获取数据时控制器中出现意外的“ ::”

来自分类Dev

在Visual C#2010 Express中为按钮文本键入Unicode字符时出现意外行为

来自分类Dev

在ggplot上为矩形图层设置Alpha比例时出现意外行为

来自分类Dev

制作尺寸相似的2D数组时出现意外行为

来自分类Dev

XML到JSON-转换列表时出现意外行为?

来自分类Dev

使用fakeAsync(),NgModel和detectChanges()进行测试时出现意外行为

来自分类Dev

使用“ import * as”并进行销毁时出现意外行为

来自分类Dev

熊猫:分组后跟聚合-连接字符串时出现意外行为

来自分类Dev

在使用sqlcmd调用的脚本中使用SET NOEXEC ON时出现意外行为

来自分类Dev

使用tee复制迭代器时出现意外行为

来自分类Dev

制作尺寸相似的2D数组时出现意外行为

来自分类Dev

按行名索引data.frame时出现意外行为

来自分类Dev

JTable:在最后一项下单击时出现意外行为

来自分类Dev

XML到JSON-转换列表时出现意外行为?

Related 相关文章

  1. 1

    在python中修改字典时出现意外行为

  2. 2

    javascript - 使用表 JS 库时出现意外行为

  3. 3

    当URL中没有尾部斜线时,使用VueJS单页进行Django路由会出现意外行为

  4. 4

    传递异步操作时出现意外行为

  5. 5

    导入软件包时出现意外行为

  6. 6

    创建字典时出现意外行为

  7. 7

    从istringstream读取字符时出现意外行为

  8. 8

    在Python中加载模块时出现意外行为

  9. 9

    使用strcat附加字符时出现意外行为

  10. 10

    使用重定向操作时出现意外行为

  11. 11

    从 stdin 读取输入参数时出现意外行为

  12. 12

    当对文件中的字符使用迭代器时,scala中出现意外行为

  13. 13

    在R中匹配'+'时在pmatch中出现意外行为

  14. 14

    在R中匹配'+'时在pmatch中出现意外行为

  15. 15

    尝试在连续请求中更新数据库时发生意外行为-EF 6

  16. 16

    Laravel,语法错误,尝试从数据库中获取数据时控制器中出现意外的“ ::”

  17. 17

    在Visual C#2010 Express中为按钮文本键入Unicode字符时出现意外行为

  18. 18

    在ggplot上为矩形图层设置Alpha比例时出现意外行为

  19. 19

    制作尺寸相似的2D数组时出现意外行为

  20. 20

    XML到JSON-转换列表时出现意外行为?

  21. 21

    使用fakeAsync(),NgModel和detectChanges()进行测试时出现意外行为

  22. 22

    使用“ import * as”并进行销毁时出现意外行为

  23. 23

    熊猫:分组后跟聚合-连接字符串时出现意外行为

  24. 24

    在使用sqlcmd调用的脚本中使用SET NOEXEC ON时出现意外行为

  25. 25

    使用tee复制迭代器时出现意外行为

  26. 26

    制作尺寸相似的2D数组时出现意外行为

  27. 27

    按行名索引data.frame时出现意外行为

  28. 28

    JTable:在最后一项下单击时出现意外行为

  29. 29

    XML到JSON-转换列表时出现意外行为?

热门标签

归档