Table of Contents

Class ServerTimingMiddleware

Namespace
Cuemon.AspNetCore.Diagnostics
Assembly
Cuemon.AspNetCore.dll

Provides a Server-Timing middleware implementation for ASP.NET Core.

public class ServerTimingMiddleware : Middleware<ILogger<ServerTimingMiddleware>, IHostEnvironment, IServerTiming, IOptions<ServerTimingOptions>>
Inheritance
ServerTimingMiddleware
Inherited Members

Examples

The following example demonstrates how to register and use ServerTimingMiddleware to emit Server-Timing performance metrics in the response header.

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

        namespace Cuemon.AspNetCore.Diagnostics;

        public static class ServerTimingMiddlewareExample
        {
            public static async Task DemonstrateAsync()
            {
                var context = new DefaultHttpContext();
        var middleware = new ServerTimingMiddleware(httpContext => httpContext.Response.WriteAsync("Hello"));

        using var loggerFactory = LoggerFactory.Create(builder => { });
        var serverTiming = new ServerTiming();
        serverTiming.AddServerTiming("db", TimeSpan.FromMilliseconds(12), "SQL query");

        await middleware.InvokeAsync(
            context,
            loggerFactory.CreateLogger<ServerTimingMiddleware>(),
            new SampleHostEnvironment(),
            serverTiming,
            Options.Create(new ServerTimingOptions { SuppressHeaderPredicate = _ => false }));

        Console.WriteLine(context.Response.Headers[ServerTiming.HeaderName].ToString());
            }
    private sealed class SampleHostEnvironment : IHostEnvironment
    {
        public string ApplicationName { get; set; } = "Docs";
        public IFileProvider ContentRootFileProvider { get; set; } = new NullFileProvider();
        public string ContentRootPath { get; set; } = ".";
        public string EnvironmentName { get; set; } = Environments.Development;
    }
        }

Constructors

ServerTimingMiddleware(RequestDelegate)

Initializes a new instance of the ServerTimingMiddleware class.

public ServerTimingMiddleware(RequestDelegate next)

Parameters

next RequestDelegate

The delegate of the request pipeline to invoke.

Methods

InvokeAsync(HttpContext, ILogger<ServerTimingMiddleware>, IHostEnvironment, IServerTiming, IOptions<ServerTimingOptions>)

Executes the ServerTimingMiddleware.

public override Task InvokeAsync(HttpContext context, ILogger<ServerTimingMiddleware> di1, IHostEnvironment di2, IServerTiming di3, IOptions<ServerTimingOptions> di4)

Parameters

context HttpContext

The context of the current request.

di1 ILogger<ServerTimingMiddleware>

The ILogger used in combination with LogLevelSelector.

di2 IHostEnvironment

The dependency injected IHostEnvironment of InvokeAsync(HttpContext, ILogger<ServerTimingMiddleware>, IHostEnvironment, IServerTiming, IOptions<ServerTimingOptions>).

di3 IServerTiming

The dependency injected IServerTiming of InvokeAsync(HttpContext, ILogger<ServerTimingMiddleware>, IHostEnvironment, IServerTiming, IOptions<ServerTimingOptions>).

di4 IOptions<ServerTimingOptions>

The dependency injected IOptions<TOptions> of InvokeAsync(HttpContext, ILogger<ServerTimingMiddleware>, IHostEnvironment, IServerTiming, IOptions<ServerTimingOptions>).

Returns

Task

A task that represents the execution of this middleware.