首页 > 解决方案 > 我应该使用什么方法来通知用户该电子邮件已被使用

问题描述

我正在使用剃须刀页面构建一个.net api,我想在创建过程中验证电子邮件输入,这样就不会将电子邮件重复存储到数据库中。我在数据库设计中使用了 UNIQUE 参数,但收效甚微。这是我当前使用剃须刀页面(CRUD)搭建的用户类。

public class User
{
    [Required]
    public int ID { get; set; }

    [Required, 
        StringLength(20, MinimumLength = 2, 
        ErrorMessage ="Name has to be between 2 and 20 characters long")]
    public string Name { get; set; }

    [Required, 
        DataType(DataType.EmailAddress), 
        RegularExpression(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"+ "@"+ @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$",
        ErrorMessage = "Invalid Email Format")]
    public string Email { get; set; }
    

    [Required, 
        DataType(DataType.Date), 
        Display(Name = "Date Of Birth")] 
    public DateTime DateOfBirth { get; set; }

    [Display(Name = "Additional Info"), 
        DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", 
        ApplyFormatInEditMode = true)]
    public string AdditionalInfo { get; set; }

    [Required, 
        StringLength(24, MinimumLength = 8, 
        ErrorMessage = "Password has to be between 8 and 24 characters long"), 
        DataType(DataType.Password)]
    public string Password { get; set; }

}

所以我像这样在我的 SQL 数据库中尝试了 UNIQUE 属性。

CREATE TABLE [dbo].[User] (
[ID]             INT            IDENTITY (1, 1) NOT NULL,
[Name]           NVARCHAR (20)  NOT NULL,
[Email]          NVARCHAR (50) NOT NULL UNIQUE,
[DateOfBirth]    DATETIME2 (7)  NOT NULL,
[AdditionalInfo] NVARCHAR (100) NULL,
[Password]       NVARCHAR (28) NOT NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ([ID] ASC));

在这种情况下检查电子邮件是否已在使用中的最佳做法是什么?

标签: c#sql-servervalidationrazor-pagesasp.net-core-5.0

解决方案


推荐阅读