架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 13261|回复: 2

[WebAPI] webapi ModelState.IsValid模型验证

[复制链接]
发表于 2017-6-26 14:16:08 | 显示全部楼层 |阅读模式
首先,我们的webapi里面的方法

  1. public string Submit([FromBody]PositionVehicleApiModel model)
  2.         {
  3.             if (ModelState.IsValid && model != null)
  4.             {
  5.                 return "ok";
  6.             }
  7.             else
  8.             {
  9.                 var msg = string.Empty;
  10.                 foreach (var value in ModelState.Values)
  11.                 {
  12.                     if (value.Errors.Count > 0)
  13.                     {
  14.                         foreach (var error in value.Errors)
  15.                         {
  16.                             msg = msg + error.ErrorMessage;
  17.                         }
  18.                     }
  19.                 }
  20.                 return msg;
  21.             }
  22.         }
复制代码
我们的车辆定位信息模型如下:

  1. [Serializable]
  2.     [DataContract]
  3.     public class PositionVehicleApiModel
  4.     {
  5.         /// <summary>
  6.                 /// 公司标识
  7.                 /// </summary>
  8.         [Required]
  9.         [DataMember(IsRequired = true)]
  10.         public virtual String CompanyId { get; set; }

  11.         /// <summary>
  12.         /// 车辆号牌
  13.         /// </summary>
  14.         [Required]
  15.         [DataMember(IsRequired = true)]
  16.         public virtual String VehicleNo { get; set; }

  17.         /// <summary>
  18.         /// 行政区划代码
  19.         /// </summary>
  20.         [Required]
  21.         [DataMember(IsRequired = true)]
  22.         public virtual int VehicleRegionCode { get; set; }

  23.         /// <summary>
  24.         /// 定位时间
  25.         /// </summary>
  26.         public virtual String PositionTime { get; set; }
  27.        
  28.         ........
  29.     }
复制代码
我们想要设置“CompanyId 属性是必需的。VehicleNo 属性是必需的。VehicleRegionCode 属性是必需的。”

(完)




上一篇:短信服务的SDK报异常:SDK.InvalidRegionId : Can not find endpoint to access.
下一篇:webapi通用签名的验证(二)
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-6-26 14:19:06 | 显示全部楼层
ASP.MVC ModelState.IsValid 模型验证的坑

当Client发起请求的时候,根本没有POST 任何一个参数的时候,ModelState.isValid 为True,model对象为空….

所以这里并不能完全信任Modelstate.isValid,使用model对象,要这样…


  1. if (ModelState.IsValid && model != null)
复制代码


码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-6-26 14:35:47 | 显示全部楼层
  1. [Serializable]
  2.     [DataContract]
  3.     public class ResultModel
  4.     {
  5.         [DataMember]
  6.         public bool result { get; set; }
  7.         [DataMember]
  8.         public String message { get; set; }
  9.         [DataMember]
  10.         public int code { get; set; }
  11.     }
复制代码

  1. public ResultModel Submit([FromBody]PositionVehicleApiModel model)
  2.         {
  3.             ResultModel result = new ResultModel();
  4.             if (ModelState.IsValid && model != null)
  5.             {
  6.                 result.result = true;
  7.                 result.message = "ok";
  8.                 result.code = 200;
  9.             }
  10.             else
  11.             {
  12.                 result.result = false;
  13.                 result.code = 200;
  14.                 if (model == null)
  15.                 {
  16.                     result.message = "The object is empty";
  17.                 }
  18.                 else {
  19.                     StringBuilder sb = new StringBuilder();
  20.                     foreach (var value in ModelState.Values)
  21.                     {
  22.                         if (value.Errors.Count > 0)
  23.                         {
  24.                             foreach (var error in value.Errors)
  25.                             {
  26.                                 sb.Append(error.ErrorMessage);
  27.                             }
  28.                         }
  29.                     }
  30.                     result.message = sb.ToString();
  31.                 }
  32.             }
  33.             return result;
  34.         }
复制代码


码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-12-15 03:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表