0

custom Model binder用所有属性创建了一个工作正常。
但问题是我缺少默认的模型绑定。
我正在使用DataAnotations我的对象,并且我只想将我的自定义模型绑定器应用于 Enums。
如何实现自定义模型绑定器以及默认模型绑定。
在自定义模型绑定器中,我的代码如下。


 public bool BindModel(System.Web.Http.Controllers.HttpActionContext actionContext, ModelBindingContext bindingContext)
        {
            var json = actionContext.Request.Content.ReadAsStringAsync().Result;
            if (!string.IsNullOrEmpty(json))
            {
                var jsonObject = (JObject) Newtonsoft.Json.JsonConvert.DeserializeObject(json);
                var jsonPropertyNames = jsonObject.Properties().Select(p => p.Name).ToList();

                var requiredProperties = bindingContext.ModelType.GetProperties().Where(p =>p.GetCustomAttributes(typeof(RequiredAttribute),
                                                                                           false).Any()).ToList();

                var missingProperties = requiredProperties.Where(bindingProperty => !jsonPropertyNames.Contains(bindingProperty.Name)).ToList();

                if (missingProperties.Count > 0)
                {

                    missingProperties.ForEach(
                        prop =>
                            {
                                if (prop.PropertyType.IsEnum)
                                    actionContext.ModelState.AddModelError(prop.Name, prop.Name + " is Required");

                            });
                }

                var nullProperties = requiredProperties.Except(missingProperties).ToList();

                if (nullProperties.Count > 0)
                {
                    nullProperties.ForEach(p =>
                        {
                            var jsonvalue = JObject.Parse(json);
                            var value = (JValue)jsonvalue[p.Name];
                            if (value.Value == null)
                            {
                                actionContext.ModelState.AddModelError(p.Name, p.Name + " is Required");
                            }

                        });
                }

            }
            // Now we can try to eval the object's properties using reflection.
            return true;
        }
4

0 回答 0