ASP.NET Web API教程(五) 數據驗證


  如何使用web api 保證數據的有效性?實際項目中不是什么數據提交過來都是符合要求的,況且在天朝還有N多河蟹的關鍵字等等。所以以下內容就是增加web api 數據驗證.
第一步修改 實體模型
public  class UserInfo
    {                    
         public  int Id {  getset; }
        [Required]
        [StringLength( 20,ErrorMessage= " 名字太長了或者太短了 ",MinimumLength= 4)]        
         public  string Name {  getset; }
              
        [RegularExpression( @" ([2-5]\d) ",ErrorMessage= " 年齡在20-50之間 ")]
         public  int Age {  getset; }
    }

注意:需要添加 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);
            }
        }
    }


注意:需要引入命名空間

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;

 

第三步 注冊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 >

 

拷貝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 >

 

增加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]);
            });
        }

 

增加服務器返回錯誤消息顯示操作

400 /* BadRequest */: function (jqxhr) {
                            var validationResult = $.parseJSON(jqxhr.responseText);
                            $.validator.unobtrusive.revalidate(form, validationResult.ModelState);
                        }


瀏覽測試得到效果
1 沒有任何輸入
 


 

2 輸入不合法


本篇完整代碼:/Files/risk/web api 5/MvcApplication1.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM