web api model验证跌重要性不必说,尽早的过滤掉非法的请求
首先自定义model 验证类 DescompareValidationAt
public class DescompareValidationAt : ValidationAttribute { public override bool IsValid(object value) { if (DES.CanDescheck((string)(value)) == true) { return true; } return false; } }
这个类主要做des 验证,传入的参数只有是des加密过的参数,接口才予以处理。
接着定义web api model 类,应用刚传的验证方法
public class accountpointrequest : BaseRequestModel { [Display(Name = "会员编号")] [DescompareValidationAt(ErrorMessage = "会员编号不符合规范")] public string customer_id { get; set; } }
在控制器部分通过ModelVerification(),ValidateFailMessage() 二个方法分别返回 是否model的验证结果和验证失败的错误消息
protected bool ModelVerification() { if (ModelState.IsValid) { return true; } else { return false; } } protected string ValidateFailMessage() { string VerificaError = null; var ErrorCollection = ActionContext.ModelState; var keylist = ErrorCollection.Keys.ToList(); var keyvalues = ErrorCollection.Values.ToList(); var Valueslist = keyvalues.ToList(); for (var i = 0; i < Valueslist.Count; i++) { for (var j = 0; j < Valueslist[i].Errors.Count; j++) { string TempString = null; TempString = Valueslist[i].Errors[j].ErrorMessage.ToString2(); if (TempString != "") { VerificaError = VerificaError + Valueslist[i].Errors[j].ErrorMessage + ";"; } } } if (VerificaError == null) { VerificaError = Common.StatusCode.SYSTEM_EXCEPTION.Description; } return VerificaError; }
得到验证失败的错误消息后就可以根据需要返回或者自己吸收掉类