如何让我的名字字段独一无二

时间:2014-02-13 05:59:34

标签: c# api

如何让我的api模型中的Name字段独一无二?

using System.ComponentModel.DataAnnotations;

namespace API.Models
{
    public class Users
    {
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        public string FullName { get; set; }

        [Required]
        public string PasswordHash { get; set; }
    }
}

1 个答案:

答案 0 :(得分:1)

在不检查数据库中的现有值的情况下,您无法从ViewModel / Client端进行检查。

我做的是当我去保存实体/对象时,我进行数据库查找,它将通过验证或验证失败。

以下是使用Entity Framework / Linq

的示例
using(var db = new DbContext())
{
     return db.User.Any(x => x.Name.Equals(modelName, StringComparison.IgnoreOrdinalCase)) 
                             ? false : true;
}

您没有说明您使用的平台,因此很难向您提供更具体的建议。

编辑:

如果它是MVC Razor,那很简单。您可以使用正确的模型属性名称

将错误消息添加到模型状态来注入错误消息
[HttpPost]
public ActionResult AddUser(AddUserModel model)
{
     if(ModelState.IsValid)
     {
         // input parameters passed - now check for uniqueness in db
          using(var db = new DbContext())
          {
               if(!db.User.Any(x => x.Name.Equals(model.Name, StringComparison.IgnoreOrdinalCase)))
               {
                     // Add to database
                     return;
               }
               else
               {
                    // hard code string or get model property name via reflection etc
                    // Or if you want a general error you can use string.Empty as the key name and display via the validation summary
                    ModelState.AddModelError("Name", "Name must be unique");

                    // Fall through and return error 
               } 
          }               
     }
     return View(model);
}

//查看

// if you've used the helper this will all you need to show
@Html.ValidationMessageFor(x => x.Name)
// Or..
@Html.ValidationSummary(true)