不允许 Guid.Empty

Sam*_*Sam 3 c# asp.net-mvc asp.net-web-api

我的类中有很多Guid属性,我想确保 aGuid.Empty将使ModelState invalid。处理这个问题的最佳方法是什么?

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

{
   public Guid Id { get; set: }

   [Required]
   public string name { get; set: }
}
Run Code Online (Sandbox Code Playgroud)

通过使用[Required],我确保用户必须始终在名称字段中给我一些东西,但如果用户不提供Id,它就会变成Guid.Empty并且ModelState仍然有效。

我想确保我将始终GuidId属性中获得一个值而不是Guid.Empty.

Sam*_*Sam 5

所以,这里是超级简单的步骤:

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

这个类看起来像这样:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我简单地将它应用到我的类中的属性。显然,我需要using引用它:

using MyApp.Utils.Validation;

{
   [CustomAttributeNoGuidEmpty]
   public Guid Id { get; set; }

   [Required]
   public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,除非 Id 的值有效,否则Guid ModelState无效。这包括 Id 字段值为 的情况Guid.Empty