zoukankan      html  css  js  c++  java
  • asp.net core 标签验证函数功能

    public class AuthFilter : Attribute, IActionFilter
        {
            public void OnActionExecuted(ActionExecutedContext context)
            {
    
            }
    
            private JsonResult ErrJsonResult(string str)
            {
    
                return  new JsonResult(JsonHelper.ToJson(OperateResult.Error(str)));
      
    
                //context.Result = new ContentResult()
                //{
                //    Content = str,
                //    ContentType = "JSON",
                //    StatusCode=0
                //};
            }
    
            
    
            /// <summary>
            /// 32位MD5加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            private string Md5Hash(string input)
            {
                System.Security.Cryptography.MD5CryptoServiceProvider md5Hasher = new System.Security.Cryptography.MD5CryptoServiceProvider();
                byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
                StringBuilder sBuilder = new StringBuilder();
                for (int i = 0; i < data.Length; i++)
                {
                    sBuilder.Append(data[i].ToString("x2"));
                }
                return sBuilder.ToString();
            }
    
            public void OnActionExecuting(ActionExecutingContext context)
            {
                context.HttpContext.Response.Headers.Add("My-Header", "WebApiFrame-Header");
    
                //JsonResult json = new JsonResult(JsonHelper.ToJson(OperateResult.Succeed("获取成功")));
                //context.Result = json;
                //ErrorRedirect(context);
    
    
                var request = context.HttpContext.Request;
    
                var method = request.Method;
                var staffId = "^和JS端需要对应$";
    
                string timestamp = string.Empty, nonce = string.Empty, signature = string.Empty;
    
                
    
                if (request.Headers.ContainsKey("timestamp"))
                    timestamp = request.Headers["timestamp"].FirstOrDefault();
    
                if (request.Headers.ContainsKey("nonce"))
                    nonce = request.Headers["nonce"].FirstOrDefault();
    
                if (request.Headers.ContainsKey("signature"))
                    signature = request.Headers["signature"].FirstOrDefault();
    
                if (string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce) || string.IsNullOrEmpty(signature))
                {
                    context.Result = ErrJsonResult( "参数错误");
                    return;
                }
    
    
                double ts = 0;
                bool timespanvalidate = double.TryParse(timestamp, out ts);
                //double c = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds - ts;
                bool falg = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds - ts > 60 * 1000;
    
                if (falg || (!timespanvalidate))
                {
                    context.Result = ErrJsonResult("timeSpanValidate");
    
                    return;
                }
    
                var data = string.Empty;
                IDictionary<string, string> sortedParams = null;
    
                switch (method.ToUpper())
                {
                    case "POST":
                    case "PUT":
                    case "DELETE":
                        //InputStream
                        Stream stream = context.HttpContext.Request.Body;
                        StreamReader streamReader = new StreamReader(stream);
                        sortedParams = new SortedDictionary<string, string>(new JsonSerializer().Deserialize<Dictionary<string, string>>(new JsonTextReader(streamReader)));
    
                        break;
    
                    case "GET":
    
                        IDictionary<string, string> parameters = new Dictionary<string, string>();
    
                        foreach (string key in context.HttpContext.Request.Query.Keys)
                        {
                            if (!string.IsNullOrEmpty(key))
                            {
                                parameters.Add(key, context.HttpContext.Request.Query[key]);
                            }
                        }
    
                        sortedParams = new SortedDictionary<string, string>(parameters);
                        break;
    
                    default:
                        context.Result = ErrJsonResult("defaultOptions");
                        return;
                }
    
                StringBuilder query = new StringBuilder();
    
                if (sortedParams != null)
                {
                    foreach (var sort in sortedParams.OrderBy(k => k.Key))
                    {
                        if (!string.IsNullOrEmpty(sort.Key))
                        {
                            query.Append(sort.Key).Append(sort.Value);
                        }
                    }
    
                    data = query.ToString().Replace(" ", "");
                }
    
                var md5Staff = Md5Hash(string.Concat(timestamp + nonce + staffId + data));
    
                if (!md5Staff.Equals(signature))
                {
                    context.Result = ErrJsonResult("md5Staff");
                    return;
                }
    
            }
    
            // 错误处理方法
            private void ErrorRedirect(ActionExecutingContext filterContext)
            {
                filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new { controller = "Home", action = "Default" }));
            } // end ErrorRedirect
            //当执行ErrorRedirect方法时,它会自己选择指定的Route并跳转到非AdminIndex的Action中.
    
            //public override void OnActionExecuting(HttpActionContext actionContext)
            //{
            //    //    // 所有维护用api请求都要求验证登录
            //    //    if (!IsLogined())
            //    //    {
            //    //        var username = HttpContext.Current.Request.QueryString["name"];
            //    //        var password = HttpContext.Current.Request.QueryString["pwd"];
            //    //        //if (actionContext.ActionArguments != null)
            //    //        //{
            //    //        //    actionContext.ActionArguments.TryGetValue("user", out username);
            //    //        //    actionContext.ActionArguments.TryGetValue("pwd", out password);
            //    //        //}
            //    //        if (!DoLogin(username, password))
            //    //        {
            //    //            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, ApiResult.CreateError("未登录"));
            //    //            return;
            //    //        }
            //    //    }
            //    //    base.OnActionExecuting(actionContext);
            //}
    
            //private bool DoLogin(string userName = "", string md5Pwd = "")
            //{
            //    // 登录验证
            //}
            //private bool IsLogined()
            //{
            //    // 通过cookie或Session判断是否登录
            //}
        }

    使用方法

    如    UserController 控制器,[AuthFilte]加上标签就会对函数验证

    [Route("api/[controller]/[action]")]
        public class UserController : Controller
        {
            // GET: api/<controller>/<action>
            [HttpGet]
            [AuthFilter]
            public string HasBindUser(string openid)
            {
                if(string.IsNullOrEmpty(openid))
                {
                    return JsonHelper.ToJson(OperateResult.Error("缺少openid参数"));
                }
                string sql = "SELECT EmpID FROM dbo.WXMiniUserBind WHERE OpenID=@OpenID AND EmpID IS NOT null";
    
                int empid = Convert.ToInt32(SqlHelper.ExecuteScalar(sql, new string[,] { { "@OpenID", openid } }));
                if(empid!=0)
                {
                    return JsonHelper.ToJson(OperateResult.SucceedData(empid));
                }
    
                return JsonHelper.ToJson(OperateResult.Error("请绑定用户"));
            }
    
            [HttpGet]
            public string Test()
            {
                return "I'm Test";
            }
            
        }
  • 相关阅读:
    总结
    设置导航栏上面的内容
    统一所有控制器导航栏左上角和右上角内容
    直接设置UIView的x,y,width,height...
    block浅析
    const浅析
    - (BOOL)isEqual:(id)object
    数据存入沙盒
    swift感悟2
    swift自学感悟1
  • 原文地址:https://www.cnblogs.com/DoNetCShap/p/9834669.html
Copyright © 2011-2022 走看看