不允许Guid.Empty
我在我的课程中有很多Guid
属性,我想确保Guid.Empty
将使ModelState
无效。处理这个问题的最好方法是什么?不允许Guid.Empty
说,我有一个用户提交到我的API操作方法如下类:
{
public Guid Id { get; set: }
[Required]
public string name { get; set: }
}
通过使用[Required]
,我要确保用户必须总是给我一些在名称字段,但如果用户不提供Id
,它变为Guid.Empty
和ModelState
仍然有效。
我想确保在Id
属性中总是得到Guid
值,而不是Guid.Empty
。
因此,这里有超级简单的步骤:
首先,我创建了一个新的命名CustomAttributeNoGuidEmpty.cs类,并把它在我的“utils的/验证”文件夹中。我发现有些人把它放在了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
的情况。
只是想知道:为什么你的观点中有指导呢? –
你的意思是代替使用INT或其他东西? – Sam
好吧,你似乎依靠用户提供一个有效的指导。 Tha不好。使用id是一种可能性,并且在视图中不使用任何键(但是保存它们并从会话中获取它们)也是值得考虑的。 –
作为一种可能的解决方案,您可以使用可空的Guid,因此默认值将为null,您将能够使用Required对其进行检查。
该解决方案将是这样的:
{
[Required]
public Guid? Id { get; set: }
[Required]
public string name { get; set: }
}
这如何帮助预防Guid.Empty?这里的关键要求是确保我们不允许Guid.Empty。 – Sam
认沽'[必需]''上Id'为好。 – Igor
这不起作用。即使用户没有提供值,它也会变成Guid.Empty,ModelState会将其视为有效。 – Sam
@Igor - 它必须是'Guid?',因为它起作用了吗? – hatchet