不允许Guid.Empty

时间:2017-01-23 19:25:15

标签: c# asp.net-mvc asp.net-web-api

我的课程中有很多Guid属性,我想确保Guid.Empty使ModelState 无效。处理这个问题的最佳方式是什么?

说,我有以下用户提交给我的API操作方法的类:

{
   public Guid Id { get; set: }

   [Required]
   public string name { get; set: }
}

通过使用[Required],我确保用户必须始终在名称字段中提供某些内容,但如果用户未提供Id,则会变为Guid.Empty和{ {1}}仍然有效。

我想确保在ModelState属性中始终获得Guid值,而不是Id

2 个答案:

答案 0 :(得分:3)

所以,这是一个非常简单的步骤:

首先,我创建了一个名为CustomAttributeNoGuidEmpty.cs的新类,并将其置于我的" Utils / Validation"夹。我看到有些人将它放在App_Code等下面,这也很好。

该课程如下:

l[i] = reverse_word(i)

然后我只是将它应用于我的类中的属性。显然,我需要using System; using System.ComponentModel.DataAnnotations; namespace MyApp.Utils.Validation { [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)] sealed public class CustomAttributeNoGuidEmpty : ValidationAttribute { public override bool IsValid(Object value) { bool result = true; if ((Guid)value == Guid.Empty) result = false; return result; } } } 来引用它:

using

现在,除非Id的值有效using MyApp.Utils.Validation; { [CustomAttributeNoGuidEmpty] public Guid Id { get; set; } [Required] public string Name { get; set; } } Guid变为无效。这包括Id字段值为ModelState的情况。

答案 1 :(得分:0)

作为一种可能的解决方案,您可以使用可空的Guid,因此默认值为null,您可以使用Required检查它。

解决方案将是这样的:

{
  [Required]
  public Guid? Id { get; set: }

  [Required]
  public string name { get; set: }
}