1.创建一个类名字叫做CustomActionFilter.cs
////// /// public class CustomActionFilter : System.Web.Http.Filters.ActionFilterAttribute { ////// /// /// /// ///public override Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken) { HttpRequest request = HttpContext.Current.Request; string token = request.Headers["token"]; string strUserName = null; try { strUserName = AesUtil.Decrypt(token, UserInformation.strGuid); } catch (Exception ex) { throw new Exception($"token:【{token}】无效"); } if (string.IsNullOrWhiteSpace(strUserName)) throw new Exception($"token:【{token}】无效"); var obj= DependencyInjection.Container.ICustomTableOperations.userInformation(strUserName); if (obj.IntCode == ReturnState.失败) throw new Exception(obj.strErr); // 获取request提交的参数 var Paramaters = GetRequestValues(actionExecutedContext); // 获取response响应的结果 var ExecuteResult = GetResponseValues(actionExecutedContext); dynamic data = JsonConvert.DeserializeObject(ExecuteResult); // 获取访问的ip var UserHostAddress = request.UserHostAddress; //请求地址 var path = request.AppRelativeCurrentExecutionFilePath; return base.OnActionExecutedAsync(actionExecutedContext, cancellationToken); } public string GetRequestValues(HttpActionExecutedContext actionExecutedContext) { Stream stream = actionExecutedContext.Request.Content.ReadAsStreamAsync().Result; stream.Position = 0; Encoding encoding = Encoding.UTF8; /* 这个StreamReader不能关闭,也不能dispose 因为你关掉后,后面的管道 或拦截器就没办法读取了 */ var reader = new StreamReader(stream, encoding); string result = reader.ReadToEnd(); /* 这里也要注意: stream.Position = 0; 当你读取完之后必须把stream的位置设为开始 因为request和response读取完以后Position到最后一个位置,交给下一个方法处理的时候就会读不到内容了。 */ stream.Position = 0; return result; } public string GetResponseValues(HttpActionExecutedContext actionExecutedContext) { Stream stream = actionExecutedContext.Response.Content.ReadAsStreamAsync().Result; stream.Position = 0; Encoding encoding = Encoding.UTF8; /* 这个StreamReader不能关闭,也不能dispose, 因为你关掉后,后面的管道 或拦截器就没办法读取了 */ var reader = new StreamReader(stream, encoding); string result = reader.ReadToEnd(); /* 这里也要注意: stream.Position = 0; 当你读取完之后必须把stream的位置设为开始 因为request和response读取完以后Position到最后一个位置,交给下一个方法处理的时候就会读不到内容了。 */ stream.Position = 0; return result; } }
2.在控制器上方加上
[CustomActionFilter]
这样就可以方便打印日志啦
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章