/// <summary> /// Constructor /// </summary> /// <param name="context">Current HttpContext from which to extract properties</param> /// <param name="flags">Determins which class of properties should be extracted</param> public LogHttpContext(HttpContext context, HttpCaptureFlags flags) { if (context == null) return; var request = context.Request; if (request == null) { return; } extractContextVariables(context,request,flags); }
private void extractContextVariables(HttpContext context, HttpRequest request, HttpCaptureFlags flags) { if ((flags & HttpCaptureFlags.ServerVariables) == HttpCaptureFlags.ServerVariables) { for(int x=0;x<request.ServerVariables.Count;x++) { var k = request.ServerVariables.AllKeys[x]; var v = request.ServerVariables[k]; if (string.IsNullOrEmpty(v)) continue; if (string.Compare("AUTH_PASSWORD",k,true )==0 && string.IsNullOrWhiteSpace(v)) { v = "****"; } this.ServerVariables.Add(k,v); } } if ((flags & HttpCaptureFlags.QueryString) == HttpCaptureFlags.QueryString) { for (int x = 0; x < request.QueryString.Count; x++) { var k = request.QueryString.AllKeys[x]; var v = request.QueryString[k]; this.QueryString.Add(k, v); } } if ((flags & HttpCaptureFlags.Cookies) == HttpCaptureFlags.Cookies) { for (int x = 0; x < request.Cookies.Count; x++) { var k = request.Cookies.AllKeys[x]; var v = request.Cookies[k].Value; this.Cookies.Add(k, v); } } if ((flags & HttpCaptureFlags.Form) == HttpCaptureFlags.Form) { for (int x = 0; x < request.Form.Count; x++) { var k = request.Form.AllKeys[x]; var v = request.Form[k]; this.Form.Add(k, v); } } if ((flags & HttpCaptureFlags.Headers) == HttpCaptureFlags.Headers) { for (int x = 0; x < request.Headers.Count; x++) { var k = request.Headers.AllKeys[x]; var v = request.Headers[k]; this.Headers.Add(k, v); } } }
/// <summary> /// Extract specific HTTP information and store it in message's HttpContext collection. /// WARNING: This is an extemely heavy operation and should only be done in extreme cases (e.g. logging exceptions) /// </summary> /// <param name="flags">Determines which information to collect from context</param> /// <returns></returns> public IEventBuilder CaptureHttp(HttpCaptureFlags flags) { httpContext = new LogHttpContext(HttpContext.Current, flags); return this; }