我有一个控制器,我的PUT方法使用multipart / form-data作为内容类型,所以我从而在控制器中获取JSON和映射类。
有没有办法可以在控制器内部对模型类中编写的注释验证此模型?
public class AbcController : ApiController
{
public HttpResponseMessage Put()
{
var fileForm = HttpContext.Current.Request.Form;
var fileKey = HttpContext.Current.Request.Form.Keys[0];
MyModel model = new MyModel();
string[] jsonformat = fileForm.GetValues(fileKey);
model = JsonConvert.DeserializeObject<MyModel>(jsonformat[0]);
}
}
我需要在控制器内验证“ model ”。 仅供参考,我已向MyModel()添加了必需的注释。
答案 0 :(得分:3)
假设您已在Product类中定义了模型,如:
namespace MyApi.Models
{
public class Product
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public decimal Price { get; set; }
}
}
然后在控制器内部写下:
public class ProductsController : ApiController
{
public HttpResponseMessage Post(Product product)
{
if (ModelState.IsValid)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
}
答案 1 :(得分:3)
手动模型验证:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
class ModelValidator
{
public static IEnumerable<ValidationResult> Validate<T>(T model) where T : class, new()
{
model = model ?? new T();
var validationContext = new ValidationContext(model);
var validationResults = new List<ValidationResult>();
Validator.TryValidateObject(model, validationContext, validationResults, true);
return validationResults;
}
}