为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
茅侃侃 2021-05-11 17:16:57
假设我有一个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]从电子邮件和密码中删除并检查这些属性,但这似乎不是一个好习惯。那么,对于此用例,还有更优雅的解决方案吗?
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

您不应将实体用作输入/输出参数。而是创建两个单独的视图模型来表示被调用的动作:


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 exist

public 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 Password

public class UpdateUserViewModel

{

    [Required]

    public long Id { get; set; } 


    [Required]

    public string FirstName { get; set; }

    [Required]

    public string LastName { get; set; }

}

当然,由于您正在创建API,因此“视图模型”可能没有多大意义。您可以改用数据传输对象(DTO)术语。


查看完整回答
反对 回复 2021-05-21
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信