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

   webApi自动认证继承类:AuthorizeAttribute

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

    [Authentication]
public class CardController : BasisController
{
}

    主要重写二个方法

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

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

    /// <summary>
/// 自动认证 作者KAI
/// </summary>
public class Authentication : AuthorizeAttribute
{
/// <summary>
/// 自动认证
/// </summary>
/// <param name="actionContext"></param>
public override void OnAuthorization(HttpActionContext actionContext)
{
//actionContext当前请求的HttpActionContext 可以获取请求的内容
//actionContext.Response
//actionContext.Request
//actionContext.RequestContext //也可以这样获取
//System.Web.HttpContext.Current.Request
//System.Web.HttpContext.Current.Response
if (true)
{
//成功以后不使用session如何把数据传到对应的Action 设置当前请求的User对象就行了 Action里面有User直接可以用
// HttpContext.Current.User = new UserModel() { loginUser = new_user }; //设置当前登陆人模型 UserModel是自定义模型
base.IsAuthorized(actionContext);
//认证成功调用 接下来会到具体的action里面运行
}
else
{
this.HandleUnauthorizedRequest(actionContext);
//认证失败调用
} }
/// <summary>
/// 错误返回
/// </summary>
/// <param name="actionContext"></param>
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
JsonData jsonData = new JsonData();
jsonData.state = "";
jsonData.message = "亲!你还没登陆哪";
actionContext.Response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(JsonHelper.ObjectToJSON(jsonData), Encoding.UTF8, "application/json")
};
}
}

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

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

   public class UserModel : IPrincipal
{
public er_wx_user loginUser { get; set; }
public bool IsInRole(string name)
{
return true;
}
public IIdentity Identity { get; set; }
}

   

2、模型认证

    webApi模型认证继承类:ActionFilterAttribute

    模型认证类使用在Action上  

   [ModelApprove]

        public HttpResponseMessage boundUserPhone([FromBody]boundUserPhone boundUserPhoneModel)
{
}

    主要重写二个方法

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

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

/// <summary>
/// 模型字段认证 作者KAI
/// </summary>
public class ModelApprove : ActionFilterAttribute
{
/// <summary>
/// 模型认证
/// </summary>
/// <param name="actionContext"></param>
public override void OnActionExecuting(HttpActionContext actionContext)
{ //模型认证不通过
//actionContext.ModelState.IsValid 模型认证是否通过根据模型的规则 自动认证
if (!actionContext.ModelState.IsValid)
{
this.ErrorRequest(actionContext);
}
} /// <summary>
/// 错误返回
/// </summary>
/// <param name="actionContext"></param>
protected void ErrorRequest(HttpActionContext actionContext)
{
//获取全部的错误模型认证错误的内容全在这个List内
List<string> errorList = new List<string>();
foreach (var value in actionContext.ModelState.Values)
{
foreach (var error in value.Errors)
{
errorList.Add(error.ErrorMessage);
}
}
//下面是错误返回 和自动认证一样写法
JsonData jsonData = new JsonData();
jsonData.state = "";
jsonData.message = errorList.FirstOrDefault();
jsonData.backData.Add("info", errorList);
actionContext.Response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(JsonHelper.ObjectToJSON(jsonData), Encoding.UTF8, "application/json")
};
}
}

3、自定义模型认证规则

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

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

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

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

  

   public class addInfo
{
[Required(ErrorMessage = "内容不能为空")]
[StringLength(, MinimumLength = , ErrorMessage = "长度范围1-10")]
[Range(typeof(string), "", "", 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; }
}

    自定义规则认证

      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("验证码失效或者错误");
} }
}
}

      反射获取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;
}
}

源码链接: 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. Mybatis+maven自动构建dao、mapper、model

    1.Pom.xml文件配置: 代码: <plugins> <!-- Mybatis generator代码生成插件 配置 --> <plugin> <grou ...

  2. Cardinality (基数)

    名词 Cardinality:    优化器在计算成本的时候,需要从统计信息中取得数据,然后去估计每一步操作所涉及的行数,叫做Cardinality.    比如,一张表T有1000行数据,列COL1 ...

  3. 在PowerShell中操作SharePoint对象

    1. 用PowerShell创建一个SharePoint内容对象创建一个自定义列表:$SPSite = New-Object Microsoft.SharePoint.SPSite("htt ...

  4. 用勤哲excel服务器开发旅行社管理软件

    做这个旅行社管理软件之前,旅行社给我的印象就是“拉客”与“接客”,业务模式应该比较简单.但做起这样一个旅行社管理软件,才发现麻雀虽小.五脏俱全,一个旅行社的运作,牵扯到的方方面面远远超出自己之前的理解 ...

  5. wordpress显示FTP上传

    在开始添加的配置文件里添加以下内容 define("FS_METHOD","direct"); define("FS_CHMOD_DIR", ...

  6. 07. 如何实现移动端rem适配

    如何实现移动端rem适配 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  7. python统计字符串中字符个数

    str = "xxx" result = {} for i in set(str):#set将字符串转为集合对象,用于去重,减少计算量 result[i] = str.count( ...

  8. P4345 [SHOI2015]超能粒子炮·改

    传送门 看到数据和模数大小就知道要上 lucas 了 然后开始愉快地推公式: 答案为 $\sum _{i=0}^kC_{n}^{i}\ (mod\ 2333)$ 设 $f [ i ] [ j ] = ...

  9. Java的JsonHelper

    <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <g ...

  10. 线段树 区间更新(更新区间[x,y]的值,再求任意区间[x,y]的和)

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...