public async Task MyMiddleware(HttpContext context, IMessageContext messageContext, FuncIn both examples, IMessageContext is injected through constructor parameter or as a dependency. It is used to access various properties of the HTTP request/response context.next) { // Access HTTP Request headers through IMessageContext string userAgent = messageContext.Request.Headers["User-Agent"]; // Access User.Identity through IMessageContext ClaimsIdentity user = messageContext.User.Identity; // Invoke the next middleware in the pipeline await next(); } public async Task MyControllerAction([FromServices] IMessageContext messageContext) { // Access HttpContext through IMessageContext HttpContext context = messageContext.HttpContext; // Access HttpContext.Response through IMessageContext context.Response.StatusCode = 200; context.Response.Headers["Content-Type"] = "text/plain"; await context.Response.WriteAsync("Hello, world!"); }