c# - 不允许 Guid.Empty

标签 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 并且 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/

相关文章:

c# - 如何将所有公共(public)方法转为内部方法?

c# - 计算对象增量

c# - 我应该如何在 Appharbor 中使用 Npgsql?

c# - 如何在 asp.net mvc 中路由 "/"(默认 url)

c# - 如何使用C#在webapi中读取同名的多个cookie

c# - 当另一个属性更改时更新多个属性?

ASP.NET 中的 CSS 字体

asp.net-mvc - Azure 托管的 ASP.NET MVC 站点删除与客户端缓存相关的 HTTP header

asp.net - 如何从C#代码中调用网址

C# Core 1.1 Web API 接收 zip 文件