我想知道如何使用ASP.NET Web API实现模型验证.我的模型是这样的:
public class Enquiry
{
[Key]
public int EnquiryId { get; set; }
[Required]
public DateTime EnquiryDate { get; set; }
[Required]
public string CustomerAccountNumber { get; set; }
[Required]
public string ContactName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我在我的API控制器中有一个Post动作:
public void Post(Enquiry enquiry)
{
enquiry.EnquiryDate = DateTime.Now;
context.DaybookEnquiries.Add(enquiry);
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
如何添加if(ModelState.IsValid)然后处理错误消息以传递给用户?
我有API需要验证我的用户模型.我选择一种方法,为创建/编辑操作创建不同的类,以避免质量分配和划分验证和实际模型分开.
我不知道为什么,但ModelState.IsValid即使它不应该返回真实.难道我做错了什么?
public HttpResponseMessage Post(UserCreate user)
{
if (ModelState.IsValid) // It's valid even when user = null
{
var newUser = new User
{
Username = user.Username,
Password = user.Password,
Name = user.Name
};
_db.Users.Add(newUser);
_db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.Created, new { newUser.Id, newUser.Username, newUser.Name });
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
Run Code Online (Sandbox Code Playgroud)
public class UserCreate
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string Name { get; set; …Run Code Online (Sandbox Code Playgroud) 在测试我的控制器的动作时,ModelState始终有效.
public class Product
{
public int Id { get; set; }
[Required]
[StringLength(10)]
public string Name { get; set; }
[Required]
public string Description { get; set; }
[Required]
public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而我的控制器.
public class ProductController : Controller
{
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
// Do some creating logic...
return RedirectToAction("Display");
}
return View(product);
}
}
Run Code Online (Sandbox Code Playgroud)
并测试:
[Test]
public TestInvalidProduct()
{
var product = new Product();
var controller = new …Run Code Online (Sandbox Code Playgroud)