Пример #1
0
    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);
                });
            }
        }
    }