public async Task RouteAsync(RouteContext context) { if (context.HttpContext.Request.Method == HttpMethods.Post) { var segments = context.HttpContext .Request .Path .Value .Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); if (segments.Length == 1 && segments[0] == "publishEvent") { using var reader = new StreamReader(context.HttpContext.Request.Body); var requestText = await reader.ReadToEndAsync(); var requestObject = JsonDocument.Parse(requestText).RootElement; var commandToken = requestObject.GetPropertyFromPath("commandToken")?.GetString(); var eventEnvelopeText = requestObject.GetPropertyFromPath("eventEnvelope")?.GetRawText(); _frontendEnvironment.PublishEventFromCommand(commandToken, command => { context.Handler = async httpContext => { httpContext.Response.StatusCode = 200; await httpContext.Response.CompleteAsync(); }; var eventEnvelope = KernelEventEnvelope.DeserializeWithCommand(eventEnvelopeText, command); return(eventEnvelope.Event); }); } } }