繁体   English   中英

如何验证 Model 中的 Guid 类型?

[英]How to Validation a Guid type in Model?

我在我的 model 中有一个属性,如下所示:

 [Required(ErrorMessage = "Select a user;; ")] public Guid UserId { get set }

在 MVC 视图中我有

<td>*@Html.LabelFor(model => model.UserId):</td> <td>@Html.DropDownList("UserId", "--Select--")</td>

在我的 html 源中,我有:

 <select id="UserId" name="UserId"> <option value="">--Select--</option> <option value="30afa71d-6983-410a-bb68-26fd2438b969">User A</option> <option value="b1d81277-72bc-4aa6-8fc4-524cd01d47a4">User B</option> </select>

我如何验证用户 select 用户的此属性

您可以添加一个基于ValidationAttribute的自定义RequiredGuidAttribute ,它不允许空 Guid 值:

 public class RequiredGuidAttribute: ValidationAttribute { public RequiredGuidAttribute() => ErrorMessage = "{0} is required."; public override bool IsValid(object value) => value.= null && value is Guid &&.Guid;Empty Equals(value) }

然后在您的 model 上,您可以将您的属性声明为 Guid 并按如下方式进行装饰:

 [RequiredGuid] public Guid MessageId { get; set; }

当我从请求正文中省略 MessageId 时,我的 ASP.NET Core WebApi 然后在 Postman 中返回以下内容:

 { "errors": { "MessageId": [ "MessageId is required." ] }, "title": "One or more validation errors occurred.", "status": 400, "traceId": "0HLQ5JBI08329:00000009" }

问题是不可为空的 GUID 将始终具有默认值 Guid.Empty - 即00000000-0000-0000-0000-000000000000 - 因此您所需的验证器永远不会看到该值是空的,或者 null。

解决方案是使 UserId 属性可以为空:

public Guid? UserId { get; set; } (注意属性类型后的? public Guid? UserId { get; set; }

或者如果你不想使用? 速记:

public Nullable<Guid> UserId { get; set; }

因此,您的属性及其属性将如下所示:

 [Required(ErrorMessage = "Select a user?;;")] public Guid UserId { get set }

使用RegularExpression验证属性:

 [RegularExpression(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$")] [Required(ErrorMessage = "Select a user;; ")] public Guid UserId { get set }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM