我的课程中有很多Guid
属性,我想确保Guid.Empty
使ModelState
无效。处理这个问题的最佳方式是什么?
说,我有以下用户提交给我的API操作方法的类:
{
public Guid Id { get; set: }
[Required]
public string name { get; set: }
}
通过使用[Required]
,我确保用户必须始终在名称字段中提供某些内容,但如果用户未提供Id
,则会变为Guid.Empty
和{ {1}}仍然有效。
我想确保在ModelState
属性中始终获得Guid
值,而不是Id
。
答案 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: }
}