Ejemplo n.º 1
0
        public IActionResult PreviewPage(string parentSlug, string childSlug)
        {
            try
            {
                // slugs coming in are not url encoded, encode them for the key to tempdata
                if (!parentSlug.IsNullOrEmpty())
                {
                    parentSlug = WebUtility.UrlEncode(parentSlug);
                }
                if (!childSlug.IsNullOrEmpty())
                {
                    childSlug = WebUtility.UrlEncode(childSlug);
                }

                var key    = BlogRoutes.GetPagePreviewRelativeLink(parentSlug, childSlug);
                var pageVM = TempData.Get <PageVM>(key);

                return(pageVM == null?View("404") : View("Page", pageVM));
            }
            catch (Exception)
            {
                // when user access the preview link directly or when user clicks on other links
                // and navigates away during the preview, hacky need to find a better way.
                return(RedirectToAction("ErrorCode", "Home", new { statusCode = 404 }));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Returns preview url.
        /// </summary>
        /// <param name="pageIM"></param>
        /// <returns></returns>
        public async Task <JsonResult> OnPostPreviewAsync([FromBody] PageIM pageIM)
        {
            // title
            var title = pageIM.Title.IsNullOrEmpty() ? "Untitled" : pageIM.Title;

            // slug
            var slug = PageService.SlugifyPageTitle(title);

            // parent slug
            var parentSlug = "";

            if (pageIM.ParentId.HasValue && pageIM.ParentId > 0)
            {
                var parent = await pageService.GetAsync(pageIM.ParentId.Value);

                parentSlug = parent.Slug;
            }

            // body
            var body = PageService.ParseNavLinks(pageIM.Body,
                                                 parentSlug.IsNullOrEmpty() ? slug : parentSlug);

            // author
            var user = await userManager.GetUserAsync(HttpContext.User);

            var author = user.DisplayName;

            // date
            var coreSettings = await settingService.GetSettingsAsync <CoreSettings>();

            var date = DateTimeOffset.Parse(pageIM.PostDate).ToDisplayString(coreSettings.TimeZoneId);

            // layout
            var pageLayout = pageIM.PageLayout;

            // preview relative link (the slugs are url encoded)
            var prevRelLink = parentSlug.IsNullOrEmpty() ?
                              BlogRoutes.GetPagePreviewRelativeLink(slug) :
                              BlogRoutes.GetPagePreviewRelativeLink(parentSlug, slug);

            // put vm in tempdata with preview link as key
            var pageVM = new PageVM
            {
                Author           = author,
                Body             = body,
                CreatedOnDisplay = date,
                Title            = title,
                PageLayout       = pageLayout,
            };

            TempData.Put(prevRelLink, pageVM);

            // return preview url
            return(new JsonResult($"{Request.Scheme}://{Request.Host}{prevRelLink}"));
        }