Exemplo n.º 1
0
 /// <summary>
 /// 异常处理Filter
 /// </summary>
 /// <param name="actionExecutedContext"></param>
 public override void OnException(HttpActionExecutedContext actionExecutedContext)
 {
     //把错误信息发送到exceptionless  地址  192.168.0.2:9400
     try
     {
         actionExecutedContext.Exception.ToExceptionless().Submit();
     }
     finally
     {
         actionExecutedContext.Response =
             ResponseHelper.CreatHttpResponseMessage(ResponseManager.GetOutputResponse(OutputStatus.Error));
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// 验证参数合法性
        /// </summary>
        /// <param name="actionContext"></param>
        public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            if (!actionContext.ModelState.IsValid)
            {
                string errorMessage = "服务器繁忙,请稍后再试";
                foreach (var value in actionContext.ModelState.Values)
                {
                    if (!value.Errors.AsEnumerable().Any())
                    {
                        continue;
                    }

                    errorMessage = value.Errors.LastOrDefault().ErrorMessage;

                    break;
                }
                actionContext.Response = ResponseHelper.CreatHttpResponseMessage(ResponseManager.GetOutputResponse(OutputStatus.ErrorParameter, errorMessage));
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// action执行前执行此方法
        /// </summary>
        /// <param name="actionContext"></param>
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            HttpContext context = HttpContext.Current;


            //验证来源 token 与签名   如果路由中没有就从header中拿
            string objSource = actionContext.ControllerContext.RouteData.Values["source"] as string;

            if (string.IsNullOrWhiteSpace(objSource))
            {
                objSource = context.Request.Headers["source"];
            }
            objVersion = actionContext.ControllerContext.RouteData.Values["version"] as string;
            if (string.IsNullOrWhiteSpace(objVersion))
            {
                objVersion = context.Request.Headers["version"];
            }

            //拿到控制器名称
            string controllerName = "";

            if (actionContext.ControllerContext.RouteData.Values.ContainsKey("controller"))
            {
                controllerName = actionContext.ControllerContext.RouteData.Values["controller"] as string;
            }


            //拿到通用参数  如果路由中没有就从header中拿
            string token = context.Request["token"];

            if (string.IsNullOrWhiteSpace(token))
            {
                token = context.Request.Headers["token"];
            }
            string timestamp = context.Request["timestamp"];

            if (string.IsNullOrWhiteSpace(timestamp))
            {
                timestamp = context.Request.Headers["timestamp"];
            }
            string signature = context.Request["signature"];

            if (string.IsNullOrWhiteSpace(signature))
            {
                signature = context.Request.Headers["signature"];
            }
            OutputModel outputModel = null;

            switch (ValidType)
            {
            case ValidType.Valid:
                if ((outputModel =
                         RequestManager.VerificationSource(out TokenDto, objVersion, objSource, token, timestamp, signature,
                                                           out Source,
                                                           AllSource, controllerName)) == null)
                {
                    return;
                }
                break;

            case ValidType.NoVliad:
                return;

            case ValidType.AllSourceAndNoValid:
                if (!Enum.TryParse <Source>(objSource, true, out Source))
                {
                    outputModel = ResponseManager.GetOutputResponse(OutputStatus.ErrorSource);
                }
                return;

            case ValidType.AllSource:
                var allSource = Source.ToList <Source>();
                if ((outputModel =
                         RequestManager.VerificationSource(out TokenDto, objVersion, objSource, token, timestamp, signature,
                                                           out Source,
                                                           allSource.ToArray(), controllerName)) == null)
                {
                    return;
                }
                break;
            }

            if (actionContext.Request.Method.ToString().ToLower().Equals("post") &&
                actionContext.ActionArguments.Count <= 0)
            {
                //是上传资源的post提交
                ApiActionProcessFilterAttribute.PostActionExceuted(new Dictionary <string, object>()
                {
                    { "token", token }, { "timestamp", timestamp }, { "signature", signature }
                }, actionContext);
            }
            actionContext.Response = ResponseHelper.CreatHttpResponseMessage(outputModel);
        }