1、登陆认证使用WebAPI自动认证

   webApi自动认证继承类:AuthorizeAttribute

    自动认证类使用在控制器上

  1. [Authentication]
  2. public class CardController : BasisController
  3. {
  4. }

    主要重写二个方法

      1、OnAuthorization 在认证的时候自动调用这个方法

      2、HandleUnauthorizedRequest 认证失败的时候调用这个方法       

  1. /// <summary>
  2. /// 自动认证 作者KAI
  3. /// </summary>
  4. public class Authentication : AuthorizeAttribute
  5. {
  6. /// <summary>
  7. /// 自动认证
  8. /// </summary>
  9. /// <param name="actionContext"></param>
  10. public override void OnAuthorization(HttpActionContext actionContext)
  11. {
  12. //actionContext当前请求的HttpActionContext 可以获取请求的内容
  13. //actionContext.Response
  14. //actionContext.Request
  15. //actionContext.RequestContext
  16.  
  17. //也可以这样获取
  18. //System.Web.HttpContext.Current.Request
  19. //System.Web.HttpContext.Current.Response
  20. if (true)
  21. {
  22. //成功以后不使用session如何把数据传到对应的Action 设置当前请求的User对象就行了 Action里面有User直接可以用
  23. // HttpContext.Current.User = new UserModel() { loginUser = new_user }; //设置当前登陆人模型 UserModel是自定义模型
  24. base.IsAuthorized(actionContext);
  25. //认证成功调用 接下来会到具体的action里面运行
  26. }
  27. else
  28. {
  29. this.HandleUnauthorizedRequest(actionContext);
  30. //认证失败调用
  31. }
  32.  
  33. }
  34. /// <summary>
  35. /// 错误返回
  36. /// </summary>
  37. /// <param name="actionContext"></param>
  38. protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
  39. {
  40. JsonData jsonData = new JsonData();
  41. jsonData.state = "";
  42. jsonData.message = "亲!你还没登陆哪";
  43. actionContext.Response = new HttpResponseMessage(HttpStatusCode.OK)
  44. {
  45. Content = new StringContent(JsonHelper.ObjectToJSON(jsonData), Encoding.UTF8, "application/json")
  46. };
  47. }
  48. }

    UserModel模型我用于传递数据到具体的Action

      使用 HttpContext.Current.User = new UserModel() { loginUser = new_user }; //设置当前登陆人模型

  1. public class UserModel : IPrincipal
  2. {
  3. public er_wx_user loginUser { get; set; }
  4. public bool IsInRole(string name)
  5. {
  6. return true;
  7. }
  8. public IIdentity Identity { get; set; }
  9. }

   

2、模型认证

    webApi模型认证继承类:ActionFilterAttribute

    模型认证类使用在Action上  

  1. [ModelApprove]
  2.  
  3. public HttpResponseMessage boundUserPhone([FromBody]boundUserPhone boundUserPhoneModel)
  4. {
  5. }

    主要重写二个方法

       1、OnActionExecuting 模型认证的时候自动调用 webApi上如果用模型接收数据则会自动认证

       2、ErrorRequest 认证失败的错误返回

  1. /// <summary>
  2. /// 模型字段认证 作者KAI
  3. /// </summary>
  4. public class ModelApprove : ActionFilterAttribute
  5. {
  6. /// <summary>
  7. /// 模型认证
  8. /// </summary>
  9. /// <param name="actionContext"></param>
  10. public override void OnActionExecuting(HttpActionContext actionContext)
  11. {
  12.  
  13. //模型认证不通过
  14. //actionContext.ModelState.IsValid 模型认证是否通过根据模型的规则 自动认证
  15. if (!actionContext.ModelState.IsValid)
  16. {
  17. this.ErrorRequest(actionContext);
  18. }
  19. }
  20.  
  21. /// <summary>
  22. /// 错误返回
  23. /// </summary>
  24. /// <param name="actionContext"></param>
  25. protected void ErrorRequest(HttpActionContext actionContext)
  26. {
  27. //获取全部的错误模型认证错误的内容全在这个List内
  28. List<string> errorList = new List<string>();
  29. foreach (var value in actionContext.ModelState.Values)
  30. {
  31. foreach (var error in value.Errors)
  32. {
  33. errorList.Add(error.ErrorMessage);
  34. }
  35. }
  36. //下面是错误返回 和自动认证一样写法
  37. JsonData jsonData = new JsonData();
  38. jsonData.state = "";
  39. jsonData.message = errorList.FirstOrDefault();
  40. jsonData.backData.Add("info", errorList);
  41. actionContext.Response = new HttpResponseMessage(HttpStatusCode.OK)
  42. {
  43. Content = new StringContent(JsonHelper.ObjectToJSON(jsonData), Encoding.UTF8, "application/json")
  44. };
  45. }
  46. }

3、自定义模型认证规则

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

  1. public class addCardLog
  2. {
  3. [Required(ErrorMessage = "卡ID不能为空")]
  4. public int card_id { get; set; }
  5.  
  6. }

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

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

  

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

    自定义规则认证

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

    主要重写一个方法

      1、IsValid

  1. /// <summary>
  2. /// 验证码检查规则
  3. /// </summary>
  4. public class VerifyCodeCheck : ValidationAttribute
  5. {
  6.  
  7. public string phoneString { get; set; }
  8.  
  9. /// <summary>
  10. /// 检查是否通过认证
  11. /// </summary>
  12. /// <param name="value"></param>
  13. /// <returns></returns>
  14. protected override ValidationResult IsValid(object value, ValidationContext validationContext)
  15. {
  16. try
  17. {
  18. //value 是认证的属性的值
  19. //validationContext.ObjectInstance 是当前模型的object 对象可以用反射获取值
  20. //可能在认证的时候需要别值参与 objectToMap方法把 object对象变成键值对对象
  21. var phone = CommonHelper.objectToMap(validationContext.ObjectInstance)[phoneString].ToString();
  22. if (CacheHelper.Get(phone).ToString().Equals(value.ToString()))
  23. {
  24. return ValidationResult.Success;
  25. }
  26. return new ValidationResult(base.ErrorMessage);
  27. }
  28. catch
  29. {
  30. return new ValidationResult("验证码失效或者错误");
  31. }
  32.  
  33. }
  34. }
  35. }

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

  1. /// <summary>
  2. /// 对象转Map集合 利用反射
  3. /// </summary>
  4. /// <typeparam name="T"></typeparam>
  5. /// <returns></returns>
  6. public static Dictionary<string, object> objectToMap(object obj)
  7. {
  8. try
  9. {
  10.  
  11. if (obj == null) throw new Exception();
  12. Dictionary<string, object> map = new Dictionary<string, object>();
  13. foreach (var attribute in obj.GetType().GetProperties()) //反射获取属性列表
  14. {
  15. map.Add(attribute.Name, attribute.GetValue(obj));
  16.  
  17. }
  18. return map;
  19. }
  20. catch
  21. {
  22.  
  23. return null;
  24. }
  25. }

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

关于.Net WebAPI数据认证(包括登陆认证、模型认证)的更多相关文章

  1. C#进阶系列——WebApi 身份认证解决方案:Basic基础认证

    前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...

  2. WebApi身份认证解决方案:Basic基础认证

    前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...

  3. C#进阶系列——WebApi身份认证解决方案:Basic基础认证 (转)

    http://www.cnblogs.com/landeanfen/p/5287064.html 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人 ...

  4. WebApi 身份认证解决方案:Basic基础认证

    前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...

  5. (转)C# WebApi 身份认证解决方案:Basic基础认证

    原文地址:http://www.cnblogs.com/landeanfen/p/5287064.html 阅读目录 一.为什么需要身份认证 二.Basic基础认证的原理解析 1.常见的认证方式 2. ...

  6. #进阶系列——WebApi 身份认证解决方案:Basic基础认证

    阅读目录 一.为什么需要身份认证 二.Basic基础认证的原理解析 1.常见的认证方式 2.Basic基础认证原理 三.Basic基础认证的代码示例 1.登录过程 2./Home/Index主界面 3 ...

  7. ASP.NET WebApi 基于OAuth2.0实现Token签名认证

    一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将是我们需要思考的问题.为了保护我们的WebApi数 ...

  8. ASP.NET Core WebApi基于Redis实现Token接口安全认证

    一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebSer ...

  9. 频率类组件-认证规图分析-JWT认证-drf-jwt插件

    频率类源码 # 1)APIView的dispath方法中的 self.initial(request, *args, **kwargs) 点进去 # 2)self.check_throttles(re ...

随机推荐

  1. 亿级PV请求的三种负载均衡技术(转)

    http://www.360doc.com/content/17/1126/23/50145453_707419125.shtml       目录 DNS轮询 LVS负载均衡 DR模式 NAT模式 ...

  2. 常用linux基础命令(持续更新...)

    删除 空目录 rmdir非空目录 rm -rf 目录名字-r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 删除文件命令rm -f 文件名将会强行删除文件,且无提 ...

  3. 最短路【洛谷P1841】 [JSOI2007]重要的城市

    P1841 [JSOI2007]重要的城市 题目描述 参加jsoi冬令营的同学最近发现,由于南航校内修路截断了原来通向计算中心的路,导致去的路程比原先增加了近一公里.而食堂门前施工虽然也截断了原来通向 ...

  4. linux 内核的 switch_to原理

    switch_to:这是一个宏,有三个参数prev,next,last 局部变量prev,next:指向进程描述符的内存地址 首先明确的是:last和prev是同一个,用last只是为了理解方便,完全 ...

  5. 提交表单存在html标签报错-检测到有潜在危险的 Request.Form 值

    1..aspx页面 在.aspx文件头中加入这句<%@ Page validateRequest="false" %> 2.通用方法 修改web.config文件, & ...

  6. 洛谷 P1801 黑匣子_NOI导刊2010提高(06)

    题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...

  7. idea 新建maven项目没有src及其子目录问题

    注意在这一步中,填写maven的本地地址还有手动修改settings地址非常重要!!! 如果你是第一次配置maven,少配置任何一个将导致你以后建立的mvn项目全部没有src目录!!! 解决办法就是卸 ...

  8. 复习一知识点:回调函数callback

    比如我们常用的异步请求: $.ajax({ url:"test.json", type: "GET", data: {username:$("#use ...

  9. Oracle 11g服务OracleDBConsoleorcl启动失败(异常或报错)

    OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl.在运行Enterprise Manager(企业管理器OEM)的时候,需要 ...

  10. DokanLibrary 卸载

    如果不小心安装了旧版...请卸载 在 c 盘中搜索  doken 其中有一个文件叫dokan.sys  它在C:\Windows\System32\drivers 文件夹中...放心删掉之.. 太坑了 ...