设为首页 加入收藏

TOP

关于.Net WebAPI数据认证(包括登陆认证、模型认证)(一)
2017-10-10 12:50:58 】 浏览:9853
Tags:关于 .Net WebAPI 数据 认证 包括 登陆 模型

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

   webApi自动认证继承类:AuthorizeAttribute

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

    [Authentication]
    public class CardController : BasisController
    {
    }
View Code

    主要重写二个方法

      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 = "400";
            jsonData.message = "亲!你还没登陆哪";
            actionContext.Response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(JsonHelper.ObjectToJSON(jsonData), Encoding.UTF8, "application/json")
            };
        }
    }
View Code

    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; }
    }
View Code    

2、模型认证

    webApi模型认证继承类:ActionFilterAttribute

    模型认证类使用在Action上  

   [ModelApprove]

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

     主要重写二个方法

       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 = "300";
            jsonData.message = er
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇调用微信JS上传照片接口上传图片 下一篇ASP.NET<% %>

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目