有没有办法验证在 web api 控制器中创建的模型?

Is there a way to validate a model which is created inside web api controller?

我有一个控制器,其中我的 PUT 方法使用 multipart/form-data 作为内容类型,因此我在控制器内部得到 JSON 和映射的 class。

有没有一种方法可以根据我在控制器内部时在模型 class 中编写的注释来验证此模型?

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]);
     }
}

我需要验证控制器内的“模型”。 仅供参考,我已经向 MyModel() 添加了必需的注释。

假设您在产品 class 中定义了模型,例如:

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);
            }
         }
    }

手动模型验证:

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;
    }
}