im trying to implement a middleware for my azure functions type httprequest, im using the interface IFunctionsWorkerMiddleware on .net 6.
public class HistoryLogMiddleware : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
var requestData = await context.GetHttpRequestDataAsync();
var body = await new StreamReader(requestData.Body).ReadToEndAsync();
Console.WriteLine($"Request Body: {body}");
await next(context);
var responseData = context.GetHttpResponseData().Body;
var resp = await new StreamReader(responseData).ReadToEndAsync();
Console.WriteLine($"Response: {resp}");
}
}
On my startup class:
[assembly: FunctionsStartup(typeof(Startup))]
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddDatabases();
builder.Services.AddExternals();
builder.Services.AddUseCases();
builder.Services.AddSingleton<HistoryLogMiddleware>();
}
}
Testing the function, the domain class works fine (because the console shows…) but the middleware never register on console or attach on debug mode.
My function:
public class RegisterClientFunction
{
private readonly IClientsDomain _clientsDomain;
public RegisterClientFunction(IClientsDomain clientsDomain)
{
_clientsDomain = clientsDomain;
}
[FunctionName(nameof(RegisterClientFunction))]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
var data = JsonConvert.DeserializeObject<RegisterClientRequest>(requestBody);
var resp = await ExecuterDomain.ExecuteAsync(() => _clientsDomain.RegisterClient(data));
return new ObjectResult(resp);
}
}
Does anybody know why the middleware isn’t being invoked ?