コード例 #1
0
        public async Task Invoke(HttpContext httpContext)
        {
            int?statusCode = default(int?);
            var profilers  = httpContext.RequestServices.ResolveMany <IProfiler <HttpProfilingContext> >();

            if (!profilers.Any())
            {
                await _next(httpContext);

                return;
            }
            Stopwatch stopwatch = Stopwatch.StartNew();

            try
            {
                await _next(httpContext);

                statusCode = httpContext.Response.StatusCode;
            }
            catch
            {
                statusCode = 500;
                throw;
            }
            finally
            {
                stopwatch.Stop();
                var context = new HttpProfilingContext
                {
                    Elapsed      = stopwatch.ElapsedMilliseconds,
                    HttpHost     = httpContext.Request.Host.Host,
                    HttpMethod   = httpContext.Request.Method,
                    HttpPath     = httpContext.Request.Path,
                    HttpPort     = httpContext.Request.Host.Port.ToString(),
                    HttpProtocol = httpContext.Request.Protocol,
                    HttpScheme   = httpContext.Request.Scheme,
                    IdentityAuthenticationType = httpContext.User.Identity.AuthenticationType,
                    IdentityName        = httpContext.User.Identity.Name,
                    RequestContentType  = httpContext.Request.ContentType,
                    ResponseContentType = httpContext.Response.ContentType,
                    StatusCode          = statusCode?.ToString(),
                };
                foreach (var profiler in profilers)
                {
                    await profiler.Invoke(context);
                }
            }
        }
コード例 #2
0
 public override void OnActionExecuted(ActionExecutedContext filterContext)
 {
     base.OnActionExecuted(filterContext);
     if (filterContext.HttpContext.Items.Contains("stopwatch"))
     {
         var stopwatch = filterContext.HttpContext.Items["stopwatch"] as Stopwatch;
         var profiler  = DependencyResolver.Current.GetService <IProfiler <HttpProfilingContext> >();
         var context   = new HttpProfilingContext
         {
             Elapsed    = stopwatch.ElapsedMilliseconds,
             HttpHost   = filterContext.HttpContext.Request.Url.Host,
             HttpMethod = filterContext.HttpContext.Request.HttpMethod,
             HttpPath   = filterContext.HttpContext.Request.Path,
             HttpPort   = filterContext.HttpContext.Request.Url.Port.ToString(),
             HttpScheme = filterContext.HttpContext.Request.Url.Scheme,
             IdentityAuthenticationType = filterContext.HttpContext.User?.Identity?.AuthenticationType,
             IdentityName        = filterContext.HttpContext.User?.Identity?.Name,
             RequestContentType  = filterContext.HttpContext.Request.ContentType,
             ResponseContentType = filterContext.HttpContext.Response.ContentType,
             StatusCode          = filterContext.HttpContext.Response.StatusCode.ToString()
         };
         profiler.Invoke(context);
     }
 }