【发布时间】:2019-03-16 05:48:00
【问题描述】:
我们在 2 个不同的项目中使用了 Usermaster DTO。
public class UserMaster : BaseProperties
{
[BsonElement]
[BsonRequired]
[Required]
public string FirstName { get; set; }
[BsonElement]
[BsonRequired]
[Required]
public string LastName { get; set; }
[BsonElement]
[BsonRequired]
[EmailAddress]
[Required]
public string EmailId { get; set; }
[BsonElement]
[BsonRequired]
[DataType(DataType.Password)]
[Required]
public string Password { get; set; }
[BsonIgnore]
[DataType(DataType.Password)]
[Required]
public string NewPassword { get; set; }
}
现在我们在 2 个不同的项目中使用这个 DTO。
项目 1 在 asp.net MVC 5.0 中是 Admin,我们可以使用 ModelState.IsValidField 来验证整个模型的一部分。
Project 2 是在 asp.net core 2 中构建的 Web Api。我找不到任何只能验证电子邮件和密码以用于登录目的的解决方案。
基本上我在 asp.net core 2 web api 中遇到问题,我无法指定只能验证的确切数据成员。我必须在其他 [Required] 字段上传递任何内容来验证请求。同样是 ModelState.IsValidField
有什么解决办法吗??
【问题讨论】:
-
不要在两个项目中使用相同的 DTO。如果您有不同的验证要求,则表明您需要不同的 DTO。此外,Model 是为 View 服务的。如果它有 anything 阻止它这样做,则不应将它用作 that 视图的模型。
-
在我看来你想把 this 分成两个类,因为目的不同
-
创建一个适合视图的新模型,并使用 AutoMapper 等将现有 DTO 映射到它。
-
@PanagiotisKanavos,我们使用 mongoDb 作为与 DTO 强绑定的后端。我们选择这种方式来减少维护工作。否则我们需要在项目中更新每一点更改
-
@Arjun 这就是为什么你不应该使用那个 DTO。它是您的 服务层 DTO,而不是您的 ViewModel。它在 99.99999% 的时间里都不能满足视图的需求。将其映射到适当的 ViewModel 模型。当您需要添加密码强度指示器时,您会怎么做?
标签: c# asp.net asp.net-web-api2 asp.net-core-2.0