ASP.NET Web API教程(五) 数据验证
如何使用web api 保证数据的有效性?实际项目中不是什么数据提交过来都是符合要求的,况且在天朝还有N多河蟹的关键字等等。所以以下内容就是增加web api 数据验证.
第一步修改 实体模型
注意:需要添加 System.ComponentModel.DataAnnotations; 引用
第一步修改 实体模型
public class UserInfo
{
public int Id { get; set; }
[Required]
[StringLength(20,ErrorMessage="名字太长了或者太短了",MinimumLength=4)]
public string Name { get; set; }
[RegularExpression(@"([2-5]\d)",ErrorMessage="年龄在20-50之间")]
public int Age { get; set; }
}
{
public int Id { get; set; }
[Required]
[StringLength(20,ErrorMessage="名字太长了或者太短了",MinimumLength=4)]
public string Name { get; set; }
[RegularExpression(@"([2-5]\d)",ErrorMessage="年龄在20-50之间")]
public int Age { get; set; }
}
注意:需要添加 System.ComponentModel.DataAnnotations; 引用
第二步增加Filter
public class ValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest,
actionContext.ModelState);
}
}
}
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest,
actionContext.ModelState);
}
}
}
注意:需要引入命名空间
using System.Web;
using System.Web.Http.Filters;
using System.Web.Http.ModelBinding;
using System.Web.Http.Controllers;
using System.Net.Http;
using System.Net;
using Newtonsoft.Json.Linq;
using System.Web.Http.Filters;
using System.Web.Http.ModelBinding;
using System.Web.Http.Controllers;
using System.Net.Http;
using System.Net;
using Newtonsoft.Json.Linq;
第三步 注册Filter
打开 webApiConfig
添加代码
config.Filters.Add(new Filters.ValidationAttribute());
第四步 编写页面
引入js/CSS
<link href="Content/Site.css" rel="stylesheet" type="text/css" />
<script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="Scripts/knockout-2.1.0.js" type="text/javascript"></script>
<script src="Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="Scripts/knockout-2.1.0.js" type="text/javascript"></script>
<script src="Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
拷贝HTMLPage2的内容稍作修改
<label for="text">
名称</label>
<input id="name" name="name" data-val="true" data-val-required="是不是忘记输入名称了?" type="text"
value="" />
<span class="field-validation-valid" data-valmsg-for="name" data-valmsg-replace="true">
</span>
<label for="text">
年龄</label>
<input id="age" name="age" type="text" data-val="true" data-val-required="年龄也是必须输入的哦!"
value="" />
<span class="field-validation-valid" data-valmsg-for="age" data-valmsg-replace="true">
</span>
<br />
<button type="submit">
Submit</button>
名称</label>
<input id="name" name="name" data-val="true" data-val-required="是不是忘记输入名称了?" type="text"
value="" />
<span class="field-validation-valid" data-valmsg-for="name" data-valmsg-replace="true">
</span>
<label for="text">
年龄</label>
<input id="age" name="age" type="text" data-val="true" data-val-required="年龄也是必须输入的哦!"
value="" />
<span class="field-validation-valid" data-valmsg-for="age" data-valmsg-replace="true">
</span>
<br />
<button type="submit">
Submit</button>
增加js,这段js是将服务返回的错误消息进行显示
$.validator.addMethod("failure", function () { return false; });
$.validator.unobtrusive.adapters.addBool("failure");
$.validator.unobtrusive.revalidate = function (form, validationResult) {
$.removeData(form[0], 'validator');
var serverValidationErrors = [];
for (var property in validationResult) {
var elementId = property.toLowerCase();
elementId = elementId.substr(elementId.indexOf('.') + 1);
var item = form.find('#' + elementId);
serverValidationErrors.push(item);
item.attr('data-val-failure', validationResult[property][0]);
jQuery.validator.unobtrusive.parseElement(item[0]);
}
form.valid();
$.removeData(form[0], 'validator');
$.each(serverValidationErrors, function () {
this.removeAttr('data-val-failure');
jQuery.validator.unobtrusive.parseElement(this[0]);
});
}
$.validator.unobtrusive.adapters.addBool("failure");
$.validator.unobtrusive.revalidate = function (form, validationResult) {
$.removeData(form[0], 'validator');
var serverValidationErrors = [];
for (var property in validationResult) {
var elementId = property.toLowerCase();
elementId = elementId.substr(elementId.indexOf('.') + 1);
var item = form.find('#' + elementId);
serverValidationErrors.push(item);
item.attr('data-val-failure', validationResult[property][0]);
jQuery.validator.unobtrusive.parseElement(item[0]);
}
form.valid();
$.removeData(form[0], 'validator');
$.each(serverValidationErrors, function () {
this.removeAttr('data-val-failure');
jQuery.validator.unobtrusive.parseElement(this[0]);
});
}
增加服务器返回错误消息显示操作
400 /* BadRequest */: function (jqxhr) {
var validationResult = $.parseJSON(jqxhr.responseText);
$.validator.unobtrusive.revalidate(form, validationResult.ModelState);
}
var validationResult = $.parseJSON(jqxhr.responseText);
$.validator.unobtrusive.revalidate(form, validationResult.ModelState);
}
浏览测试得到效果
1 没有任何输入
2 输入不合法
作者:risk
出处:http://www.cnblogs.com/risk
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/risk
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:
web api
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库