zoukankan      html  css  js  c++  java
  • web api 过滤器

     /// <summary>
        /// 渠道过滤器
        /// </summary>
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
        public class ChannelActionFilterAttribute : ActionFilterAttribute
        {
            /// <summary>
            /// 请求接口之前渠道过滤
            /// </summary>
            /// <param name="actionContext"></param>
            public override void OnActionExecuting(HttpActionContext actionContext)
            {
                var identity = ParseHeader(actionContext);
                if (identity == null)
                {
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden,"请求来源未知,没有该接口访问权限。");
                    return;
                }
                if (!ValidChannel(identity))
                {
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden, "请求来源未知,没有该接口访问权限。");
                }
                base.OnActionExecuting(actionContext);
            }
    
            /// <summary>
            /// 渠道验证
            /// </summary>
            /// <param name="identity">渠道信息</param>
            /// <returns></returns>
            protected bool ValidChannel(ChannelIdentity identity)
            {
                ChannelsService svr = new ChannelsService();
                try
                {
                    return svr.ValidateChannel(identity.SecretKey, identity.AppKey);
                }
                catch (Exception ex)
                {
                    Logger.Warn("ChannelActionFilterAttribute[ValidChannel]:渠道来源校验时发生异常", ex);
                    return false;
                }
               
            }
    
            /// <summary>
            /// 获取渠道信息
            /// </summary>
            /// <param name="actionContext"></param>
            protected ChannelIdentity ParseHeader(HttpActionContext actionContext)
            {
                IEnumerable<string> secretKeys = null;
                IEnumerable<string> appKeys = null;
                string secretKey = string.Empty;
                string appKey = string.Empty;
                if(actionContext.Request.Headers.TryGetValues("SecretKey", out secretKeys))
                {
                    foreach (var key in secretKeys)
                    {
                        secretKey = key;
                        break;
                    }
                }
    
                if (actionContext.Request.Headers.TryGetValues("AppKey", out appKeys))
                {
                    foreach (var key in appKeys)
                    {
                        appKey = key;
                        break;
                    }
                }
    
                if (!string.IsNullOrEmpty(secretKey) && !string.IsNullOrEmpty(appKey))
                {
                    return new ChannelIdentity(secretKey, appKey);
                }
                return null;
            }
        }

    控制器controller中使用过滤器:

      /// <summary>
        /// 用户管理
        /// </summary>
        [ChannelActionFilter, RoutePrefix("Media/Users")]
        public class UsersController : ApiController
        {
            //todo
        }
  • 相关阅读:
    Python学习之路 (五)爬虫(四)正则表示式爬去名言网
    Python学习之路 (四)爬虫(三)HTTP和HTTPS
    Python学习之路 (三)爬虫(二)
    Python学习之路 (二)爬虫(一)
    Python学习之路 (一)开发环境搭建
    ZooKeeper学习之路 (十一)ZooKeeper API的应用
    ZooKeeper学习之路 (十)Hadoop的HA集群的机架感知
    Spring Security
    Spring Validation
    [转]linux下完全备份数据库mysql
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/5478644.html
Copyright © 2011-2022 走看看