/// <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)); } }
/// <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)); } }
/// <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); }