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 })); } }
/// <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}")); }