设为首页 加入收藏

TOP

关于.Net WebAPI数据认证(包括登陆认证、模型认证)(二)
2017-10-10 12:50:58 】 浏览:9856
Tags:关于 .Net WebAPI 数据 认证 包括 登陆 模型
rorList.FirstOrDefault(); jsonData.backData.Add(
"info", errorList); actionContext.Response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(JsonHelper.ObjectToJSON(jsonData), Encoding.UTF8, "application/json") }; } } View Code

3、自定义模型认证规则

    认证规则使用在模型属性上

  public class addCardLog
    {
        [Required(ErrorMessage = "卡ID不能为空")]
        public int card_id { get; set; }

    }
View Code

    有一些系统自带的认证规则

    所在命名空间 :using System.ComponentModel.DataAnnotations;

  

   public class addInfo
    {
        [Required(ErrorMessage = "内容不能为空")]
        [StringLength(10, MinimumLength = 1, ErrorMessage = "长度范围1-10")]
        [Range(typeof(string), "1", "2", ErrorMessage = "类型为1或者2")]
        [RegularExpression(@"^1(3|4|5|7|8)\d{9}$", ErrorMessage = "正则表达式认证错误内容")]
        [Compare("name_two",ErrorMessage ="二次名字不一致")]//内容是否和name_two一样多在认证二次密码 输入是否一致
        public string name { get; set; }
        public string name_two { get; set; }
    }
View Code

     自定义规则认证

      webApi模型认证自定义规则继承类:ValidationAttribute

    主要重写一个方法

      1、IsValid

    /// <summary>
    /// 验证码检查规则
    /// </summary>
    public class VerifyCodeCheck : ValidationAttribute
    {

        public string phoneString { get; set; }

        /// <summary>
        /// 检查是否通过认证
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            try
            {
                //value 是认证的属性的值
                //validationContext.ObjectInstance 是当前模型的object 对象可以用反射获取值 
                //可能在认证的时候需要别值参与 objectToMap方法把 object对象变成键值对对象
                var phone = CommonHelper.objectToMap(validationContext.ObjectInstance)[phoneString].ToString();
                if (CacheHelper.Get(phone).ToString().Equals(value.ToString()))
                {
                    return ValidationResult.Success;
                }
                return new ValidationResult(base.ErrorMessage);
            }
            catch
            {
                return new ValidationResult("验证码失效或者错误");
            }

        }
    }
}
View Code

       反射获取object对象的公共属性和值

   /// <summary>
        /// 对象转Map集合 利用反射
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static Dictionary<string, object> objectToMap(object obj)
        {
            try
            {

                if (obj == null) throw new Exception();
                Dictionary<string, object> map = new Dictionary<string, object>();
                foreach (var attribute in obj.GetType().GetProperties()) //反射获取属性列表
                {
                    map.Add(attribute.Name, attribute.GetValue(obj));

                }
                return map;
            }
            catch
            {

                return null;
            }
        }
View Code

 源码链接: https://pan.baidu.com/s/1dEHWkut 密码: 29qr

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇调用微信JS上传照片接口上传图片 下一篇ASP.NET<% %>

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目