public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); HttpRequestBase request = filterContext.HttpContext.Request; APIAccessLogItem item; try { var controller = filterContext.Controller; var routeData = request.RequestContext.RouteData; StringBuilder sb = new StringBuilder(); for (int i = 0; i < request.Headers.Count; i++) { sb.AppendFormat("{0}={1};", request.Headers.Keys[i], request.Headers[i].ToString()); } item = new APIAccessLogItem() { RequestDate = DateTime.Now, RequestType = request.RequestType, Url = request.RawUrl, IPAddress = request.UserHostAddress, Controller = (string)routeData.Values["controller"], Action = (string)routeData.Values["action"], RequestHeader = sb.ToString() }; sb = null; using (StreamReader reader = new StreamReader(request.InputStream)) { try { request.InputStream.Position = 0; item.RequestBody = reader.ReadToEnd(); } catch (Exception ex) { item.RequestBody = string.Empty; //log errors } finally { request.InputStream.Position = 0; } } filterContext.HttpContext.Response.Filter = new CapturingResponseFilter(filterContext.HttpContext.Response.Filter, item); } catch (Exception ex) { //log errors } }
public CapturingResponseFilter(Stream sink, APIAccessLogItem item) { _sink = sink; AccessLogItem = item; mem = new MemoryStream(); }
public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); HttpRequestBase request = filterContext.HttpContext.Request; APIAccessLogItem item; try { var controller = filterContext.Controller; var routeData = request.RequestContext.RouteData; StringBuilder sb = new StringBuilder(); for (int i = 0; i < request.Headers.Count; i++) sb.AppendFormat("{0}={1};", request.Headers.Keys[i], request.Headers[i].ToString()); item = new APIAccessLogItem() { RequestDate = DateTime.Now, RequestType = request.RequestType, Url = request.RawUrl, IPAddress = request.UserHostAddress, Controller = (string)routeData.Values["controller"], Action = (string)routeData.Values["action"], RequestHeader = sb.ToString() }; sb = null; using (StreamReader reader = new StreamReader(request.InputStream)) { try { request.InputStream.Position = 0; item.RequestBody = reader.ReadToEnd(); } catch (Exception ex) { item.RequestBody = string.Empty; //log errors } finally { request.InputStream.Position = 0; } } filterContext.HttpContext.Response.Filter = new CapturingResponseFilter(filterContext.HttpContext.Response.Filter, item); } catch (Exception ex) { //log errors } }