Exemple #1
0
        protected void ContextBeginRequest(object sender, EventArgs e)
        {
            HttpContext httpContext = _context.Context;
            //read current

            var requestParams = new RequestParams
            {
                RequestUri = httpContext.Request.Url,
                UserAgent  = httpContext.Request.UserAgent
            };

            if (Utility.IsRequestShouldBePrerendered(requestParams, _config))
            {
                var rendererConfig = new PrerenderServiceConfiguration(_config);
                var renderer       = new SnapshotRenderer(rendererConfig);

                string snapshotUrl = Utility.GetSnapshotUrl(httpContext.Request.Url);
                //render page html
                PrerenderResult response;
                try
                {
                    response = renderer.RenderPage(snapshotUrl).Result;
                }
                catch (AggregateException ex)
                {
                    string messages = "";
                    for (int i = 0; i < ex.InnerExceptions.Count; i++)
                    {
                        messages += ex.InnerExceptions[i].Message + Environment.NewLine;
                    }
                    httpContext.Response.Write(
                        string.Format(
                            "Failed to prerender request '{0}'. One or more exeptions has occured: '{1}'. Stack trace: '{2}'",
                            snapshotUrl, messages, ex.StackTrace));
                    httpContext.Response.StatusCode = 500;
                    httpContext.Response.Flush();
                    _context.CompleteRequest();
                    return;
                }

                httpContext.Response.Write(response.Content);
                httpContext.Response.ContentType = "text/html";
                httpContext.Response.StatusCode  = (int)response.StatusCode;
                httpContext.Response.Flush();
                _context.CompleteRequest();
            }
        }
        public override async Task Invoke(IOwinContext context)
        {
            PrerenderConfig config        = PrerenderConfig.GetCurrent();
            var             requestParams = new RequestParams
            {
                RequestUri = context.Request.Uri,
                UserAgent  = context.Request.Headers["user-agent"]
            };

            if (Utility.IsRequestShouldBePrerendered(requestParams, config))
            {
                var rendererConfig = new PrerenderServiceConfiguration(config);
                var renderer       = new SnapshotRenderer(rendererConfig);


                string snapshotUrl = Utility.GetSnapshotUrl(context.Request.Uri);
                //render page html
                PrerenderResult response;
                try
                {
                    response = await renderer.RenderPage(snapshotUrl);
                }
                catch (WebException e)
                {
                    context.Response.Write(
                        string.Format("Failed to prerender request '{0}'. Error message: '{1}'. Stack trace: '{2}'",
                                      snapshotUrl, e.Message, e.StackTrace));
                    context.Response.StatusCode = 500;
                    return;
                }

                await context.Response.WriteAsync(response.Content);

                context.Response.ContentType = "text/html";
                context.Response.StatusCode  = (int)response.StatusCode;
                context.Set("HTML_SNAPSHOT_MIDDLEWARE", true);
            }
            else
            {
                await Next.Invoke(context);
            }
        }
 public void Init()
 {
     _renderer = new SnapshotRenderer(new TestPrerendererConfiguration());
 }