我的类中有很多 Guid
属性,我想确保 Guid.Empty
将使 ModelState
无效。处理此问题的最佳方法是什么?
比如说,我有以下用户提交给我的 API 操作方法的类:
{
public Guid Id { get; set: }
[Required]
public string name { get; set: }
}
通过使用 [Required]
,我确保用户必须始终在名称字段中给我一些东西,但如果用户不提供 Id
,它变为 Guid.Empty
并且 ModelState
仍然有效。
我想确保我将始终在 Id
属性中获得一个 Guid
值,而不是一个 Guid.Empty
。
最佳答案
所以,这里是 super 简单的步骤:
首先,我创建了一个名为 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;
}
}
}
然后我只需将它应用到我的类中的属性。显然,我需要 using
来引用它:
using MyApp.Utils.Validation;
{
[CustomAttributeNoGuidEmpty]
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
}
现在,除非 Id 的值是一个有效的 Guid
ModelState
变得无效。这包括 Id 字段的值为 Guid.Empty
的情况。
关于c# - 不允许 Guid.Empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41814069/