namespace API.Middlewares; public class ApiKeyValidationMiddleware { private readonly RequestDelegate _next; private const string APIKEYNAME = "ApiKey"; public ApiKeyValidationMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { if (!context.Request.Headers.TryGetValue(APIKEYNAME, out var extractedApiKey)) { context.Response.StatusCode = 401; await context.Response.WriteAsync("API Key was not provided."); return; } var appSettings = context.RequestServices.GetRequiredService(); var apiKey = appSettings.GetValue("ApiKey"); if (string.IsNullOrEmpty(apiKey)) { context.Response.StatusCode = 400; await context.Response.WriteAsync("Unable to retrieve API key."); return; } if (!apiKey.Equals(extractedApiKey)) { context.Response.StatusCode = 401; await context.Response.WriteAsync("Unauthorized client."); return; } await _next(context); } }