Как я уже сказал, я хочу сделать это через промежуточное ПО, а не в конце конвейера http. Тем временем я нашел решение, оно простое, но оно работает.
Я создал класс с именем MiddelWareKeyValidation со следующим методом asyn c:
public async Task Invoke(HttpContext context)
{
if (!context.Request.Headers.Keys.Contains("X-GCS-Signature") || !context.Request.Headers.Keys.Contains("X-GCS-KeyId"))
{
context.Response.StatusCode = 400;
await context.Response.WriteAsync("User Key is missing");
return;
}
else
{
var apiKey = new ApiKey { Signature = context.Request.Headers["X-GCS-Signature"], Key = context.Request.Headers["X-GCS-KeyId"] };
if (!ContactsRepo.CheckValidUserKey(apiKey))
{
context.Response.StatusCode = 401;
await context.Response.WriteAsync("Invalid User Key");
return;
}
}
await _next.Invoke(context);
}
Затем я go к моему Startup.cs в методе Configure, где я добавляю новое промежуточное ПО, например:
app.UseMiddleware<MiddelWareKeyValidation>();
Хороший ресурс и кредиты идут в эту статью: https://www.mithunvp.com/write-custom-asp-net-core-middleware-web-api/