private Task <string> WarmupService(IHotNodeService service, CancellationToken token)
 {
     return(service.InvokeExportAsync <string>(CancellationToken.None, _options.WarmupPath, null, File.ReadAllText(_options.IndexTemplatePath), _options.HotModuleReplacement));
 }
Ejemplo n.º 2
0
        public async Task Invoke(HttpContext httpContext, DirectLinkContext context, IRoutingService routingService, IHotNodeService nodeService)
        {
            var request = httpContext.Request;

            context.HttpContext = httpContext;
            context.Path        = request.PathBase.Value + request.Path.Value + request.QueryString;

            var response = await routingService.GetResponseAsync(context);

            httpContext.Response.StatusCode = response.StatusCode;
            httpContext.Response.Headers["Cache-Control"] = "no-store";
            if (response.Data != null)
            {
                var dataJson = JsonConvert.SerializeObject(response.Data);
                foreach (var style in response.Data.Styles)
                {
                    context.Tags.Head.AddLink(style.Value);
                }
                foreach (var script in response.Data.Scripts)
                {
                    context.Tags.Head.AddScript(script.Value);
                }
                context.Data.Add("title", context.Title);
                context.Data.Add("metaTags", context.Tags.GetMetaTags());
                context.Data.Add("headTags", context.Tags.Head);
                context.Data.Add("contentTags", context.Tags.Content);
                context.Data.Add("bodyTags", context.Tags.Body);
                context.Data.Add("serverTime", DateTime.Now.Ticks.ToString());

                var contextDataJson = JsonConvert.SerializeObject(context.Data);
                var cookiesJson     = JsonConvert.SerializeObject(httpContext.Request.Cookies.ToDictionary(k => k.Key, v => v.Value));
                var content         = $@"{{""moduleName"":""{_moduleName}"",""args"":[""{_wwwroot}"",{dataJson},{contextDataJson},{cookiesJson}]}}";
                var payload         = new StringContent(content, Encoding.UTF8, "application/json");
                var result          = await nodeService.InvokeExportAsync <string>(CancellationToken.None, payload);

                await httpContext.Response.WriteAsync(result);

                return;
            }
            if (response.Message != null)
            {
                await httpContext.Response.WriteAsync(response.Message);
            }
        }