Middleware Runtime v3 di Funzioni di Azure

Middleware Runtime v3 di Funzioni di Azure

La soluzione per il middleware Azure Functions Runtime v3
è indicata di seguito:

Esiste un modo per accedere all'oggetto di richiesta e risposta in un middleware di Azure.

Utilizzando un tutorial per un middleware di registrazione sono già arrivato a questo punto:

public class ExceptionLoggingMiddleware : IFunctionsWorkerMiddleware
{
    public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
    {
        try
        {
            // Code before function execution here
            await next(context);
            // Code after function execution here
        }
        catch (Exception ex)
        {
            var log = context.GetLogger<ExceptionLoggingMiddleware>();
            log.LogWarning(ex, string.Empty);
        }
    }
}

ma voglio accedere anche alla risposta e all'oggetto della richiesta. Come il codice di stato, i parametri del corpo, i parametri della query ecc. È possibile?

Anche se non esiste un modo diretto per farlo, esiste una soluzione alternativa per accedere a HttpRequestData (Non è la soluzione migliore ma dovrebbe funzionare fino a quando non ci sarà una soluzione. ):

public static class FunctionContextExtensions
{
    public static HttpRequestData GetHttpRequestData(this FunctionContext functionContext)
    {
        try
        {
            KeyValuePair<Type, object> keyValuePair = functionContext.Features.SingleOrDefault(f => f.Key.Name == "IFunctionBindingsFeature");
            object functionBindingsFeature = keyValuePair.Value;
            Type type = functionBindingsFeature.GetType();
            var inputData = type.GetProperties().Single(p => p.Name == "InputData").GetValue(functionBindingsFeature) as IReadOnlyDictionary<string, object>;
            return inputData?.Values.SingleOrDefault(o => o is HttpRequestData) as HttpRequestData;
        }
        catch
        {
            return null;
        }
    }
}

E puoi usarlo in questo modo:

public class CustomMiddleware : IFunctionsWorkerMiddleware
{
    public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
    {
        HttpRequestData httpRequestData = context.GetHttpRequestData();

        // do something with httpRequestData

        await next(context);
    }
}

Dai un'occhiata a questo per maggiori dettagli.

Per Http Response , non esiste una soluzione alternativa AFAIK. Inoltre, controlla GH Issue#530, che dice che la documentazione per questo sarà aggiunta presto. Questa funzionalità sembra molto richiesta e dovrebbe essere risolta presto (al momento della stesura di questo).