我有以下代码段。最终,我试图让ModelState显示有效= false。现在它说有效=真。
Ajax代码:
$(':input', '#intform').each(function () {
frmData[this.id] = this.value;
});
var DTO = { 'frmData': frmData };
$.ajax({
url: url,
dataType: 'json',
contentType: 'application/json',
type: 'POST',
data: JSON.stringify(DTO)
})
webAPI控制器:
public Object Post([FromBody]JObject data)
dynamic json = data;
frmData item = new frmData()
{
Subject = "Loan Request Received",
Body = "The following loan request has been received:",
BName = json.frmData.BName,
BType = json.frmData.BType,
...
}
型号:
public class frmData
{
[LookupValueValidation(maxLength = 50, required = true)]
public string BName
{
get { return _bName; }
set { _bName = AntiXssEncoder.HtmlEncode(value,true); }
}
}
我想在webApi控制器中使用此构造:
if (!ModelState.IsValid || data == null)
{
throw new Exception();
}
但是,如果我为BName输入100个字符,ModelState会说它是有效的= true。我希望它是假的。我感觉我如何将数据作为JSON对象之间存在脱节,但我并不是100%肯定。
答案 0 :(得分:0)
@Stryner提到Validator.TryValidateObject
为我工作:
var isValid = Validator.TryValidateObject(item, new ValidationContext(item, null, null), errors, true);
我设置了ValidationResult
列表以捕获任何错误:
var errors = new List<ValidationResult>();
我能够使用这个结构遍历任何错误:
foreach(ValidationResult vr in errors){
vrMessage.Add(vr.ErrorMessage.ToString());
return Json(new { fail = vr.ErrorMessage.ToString() });
}
ValidationResult
循环有点笨拙,可能需要修改,但我只需要为此应用程序返回第一个错误,因此我将其保留为当前状态。