1.创建一个类名字叫做CustomActionFilter.cs
/// <summary>/// /// </summary>public class CustomActionFilter : System.Web.Http.Filters.ActionFilterAttribute{/// <summary>/// /// </summary>/// <param name="actionExecutedContext"></param>/// <param name="cancellationToken"></param>/// <returns></returns>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);// 获取访问的ipvar 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]
这样就可以方便打印日志啦