如何在POST上创建必需的属性,但在PUT请求上不设置

假设我有一个User模型,该模型具有Email和Password用于身份验证的属性,如下所示:


public class User

{

    public long Id { get; set; }

    [Required]

    public string FirstName { get; set; }

    [Required]

    public string LastName { get; set; }


    [Required]

    [EmailAddress]

    public string Email { get; set; }


    [Required]

    [DataType(DataType.Password)]

    public string Password { get; set; }

}

我的目标是使这些属性仅在POST请求上才需要,而在PUT上则不需要。即:创建新用户需要电子邮件和密码字段。但是在编辑时,我可以忽略这些属性。我知道可以存档该目标,以便在发布时[Required]从电子邮件和密码中删除并检查这些属性,但这似乎不是一个好习惯。


那么,对于此用例,还有更优雅的解决方案吗?


茅侃侃
浏览 130回答 2
2回答

开满天机

您不应将实体用作输入/输出参数。而是创建两个单独的视图模型来表示被调用的动作:public class User{    public long Id { get; set; }    [Required]    public string FirstName { get; set; }    [Required]    public string LastName { get; set; }    [Required]    [EmailAddress]    public string Email { get; set; }    [Required]    [DataType(DataType.Password)]    public string Password { get; set; }}// When creating, the client cannot know the Id because it doesn't existpublic class CreateUserViewModel{    [Required]    public string FirstName { get; set; }    [Required]    public string LastName { get; set; }    [Required]    [EmailAddress]    public string Email { get; set; }    [Required]    [DataType(DataType.Password)]    public string Password { get; set; }}// and when updating, the Id is required but not the Email nor the Passwordpublic class UpdateUserViewModel{    [Required]    public long Id { get; set; }     [Required]    public string FirstName { get; set; }    [Required]    public string LastName { get; set; }}当然,由于您正在创建API,因此“视图模型”可能没有多大意义。您可以改用数据传输对象(DTO)术语。
打开App,查看更多内容
随时随地看视频慕课网APP