在webapi2中使用自定义模型绑定器时验证模型

时间:2017-12-04 06:20:16

标签: c# asp.net-mvc asp.net-web-api2

我正在执行自定义WebApi2模型绑定器,如下所示: 这是成功创建模型。我正在抑制JSON序列化程序错误,因为它们不对应于默认模型绑定程序通常提供的相同错误。

无论是否需要'和模型上的其他属性一样,ModelState为空。

我如何

  • 调用默认模型绑定器以获取包含所有相关模型状态错误的PartyModel?
  • 在序列化了哪些属性后,执行默认模型验证器以填充模型状态中的相关错误?

    public bool BindModel(
       HttpActionContext actionContext, 
       System.Web.Http.ModelBinding.ModelBindingContext bindingContext)
    {
        if (bindingContext.ModelType != typeof(PartyModel))
            return false;

        var json = actionContext.Request.Content.ReadAsStringAsync().Result;
        var settings = new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.Auto,
                // ignore json serializer errors, as they don't
                // seem to mimic the webapi2 default validator names/descriptions.
                Error = (s, e) => e.ErrorContext.Handled = true
            };
        var model = JsonConvert.DeserializeObject<PartyModel>(json, settings);  

        // at this point the model needs to be validated.

        bindingContext.Model = model;
        return true;
    }

1 个答案:

答案 0 :(得分:1)

    public bool BindModel(
         HttpActionContext actionContext,  
         System.Web.Http.ModelBinding.ModelBindingContext bindingContext)
    {
        if (bindingContext.ModelType != typeof(PartyModel))
            return false;
        ...

        // following lines invoke default validation on model
        bindingContext.ValidationNode.ValidateAllProperties = true;
        bindingContext.ValidationNode.Validate(actionContext);
        return true;
    }