如何让我的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; }
}
}
答案 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)