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

时间:2016-11-03 10:57:57

标签: c# asp.net-web-api model-validation

我有一个控制器,我的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()添加了必需的注释。

2 个答案:

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