Ich habe versucht, das InvocationResult zu manipulieren, aber das heißt, welches Objekt auch immer vom Trigger zurückgegeben wurde (kein Zugriff auf Metadaten).
Ich habe auch versucht, ein EventData-Objekt vom Trigger zurückzugeben, aber das ist nur in eine Zeichenfolge „Azure.Messaging“ serialisiert. EventHubs.EventData" on das EH-Thema und nicht das eigentliche EventData-Objekt
Irgendwelche Ideen, wie man Header/Eigenschaften in EventHubOutput-Bindungen in Function Middleware festlegt?
InvocationResult verwenden
Code: Select all
[Function("MyFunction")]
[EventHubOutput("output", Connection = "output-connection")]
public async Task Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req)
{
return "my payload";
}
Code: Select all
public class CorrelationMiddleware : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
await next(context);
SetOutputCorrelation(context);
}
private void SetOutputCorrelation(FunctionContext context)
{
var correlationId = Guid.NewGuid().ToString();
var result = context.GetInvocationResult();
// result is just the string returned from trigger - no access to metadata
}
}
Code: Select all
[Function("MyFunction")]
[EventHubOutput("output", Connection = "output-connection")]
public async Task Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req)
{
var payload = "my payload";
var eventData = new EventData(Encoding.UTF8.GetBytes(payload));
return eventData;
}
Code: Select all
public class CorrelationMiddleware : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
await next(context);
SetOutputCorrelation(context);
}
private void SetOutputCorrelation(FunctionContext context)
{
var correlationId = Guid.NewGuid().ToString();
var result = context.GetInvocationResult();
if (result.Value is EventData eventData)
{
eventData.Properties["correlation-id"] = correlationId;
}
}
}