public async Task ExecuteAsync(Controller controller, PageActionRoutingState state)
        {
            var query = new GetPageRenderDetailsByIdQuery();

            query.PageId = state.PageRoutingInfo.PageRoute.PageId;

            if (state.InputParameters.IsEditingCustomEntity)
            {
                // If we're editing a custom entity, then get the latest version of the page
                query.PublishStatus = PublishStatusQuery.Latest;
            }
            else if (state.InputParameters.VersionId.HasValue)
            {
                query.PublishStatus = PublishStatusQuery.SpecificVersion;
                query.PageVersionId = state.InputParameters.VersionId;
            }
            else
            {
                query.PublishStatus = state.VisualEditorState.GetPublishStatusQuery();
            }

            state.PageData = await _queryExecutor.ExecuteAsync(query);

            // if no data is found there was an issue with creating a draft earlier on.
            if (state.PageData == null && state.VisualEditorState.VisualEditorMode == VisualEditorMode.Edit)
            {
                throw new Exception("Draft version missing for page id " + query.PageId);
            }

            // If we can't find any page data, then return a 404
            if (state.PageData == null)
            {
                state.Result = await _notFoundViewHelper.GetViewAsync(controller);
            }
        }
        public async Task ExecuteAsync(Controller controller, PageActionRoutingState state)
        {
            // Ensure that non-authenticated users can't access previous versions
            if (state.VisualEditorState.VisualEditorMode != VisualEditorMode.SpecificVersion)
            {
                state.InputParameters.VersionId = null;
            }
            else if (state.PageRoutingInfo != null)
            {
                var versionRoute = state.PageRoutingInfo.GetVersionRoute(
                    state.InputParameters.IsEditingCustomEntity,
                    state.VisualEditorState.GetPublishStatusQuery(),
                    state.InputParameters.VersionId);

                // If this isn't an old version of a page, set the VisualEditorMode accordingly.
                if (versionRoute != null)
                {
                    if (versionRoute.WorkFlowStatus == WorkFlowStatus.Draft)
                    {
                        var url = _pageRouteLibrary.VisualEditor(
                            state.PageRoutingInfo,
                            VisualEditorMode.Preview,
                            state.InputParameters.IsEditingCustomEntity
                            );

                        state.Result = controller.Redirect(url);
                    }
                    else if (versionRoute.IsLatestPublishedVersion && state.PageRoutingInfo.IsPublished())
                    {
                        var url = _pageRouteLibrary.VisualEditor(
                            state.PageRoutingInfo,
                            VisualEditorMode.Live,
                            state.InputParameters.IsEditingCustomEntity
                            );

                        state.Result = controller.Redirect(url);
                    }
                }
                else
                {
                    // Could not find a version, id must be invalid
                    state.Result = await _notFoundViewHelper.GetViewAsync(controller);
                }
            }
        }
        public async Task <IActionResult> ErrorCode(int statusCode)
        {
            var request = HttpContext.Request;
            var feature = HttpContext.Features.Get <IStatusCodeReExecuteFeature>();

            if (statusCode == (int)HttpStatusCode.NotFound)
            {
                return(await _notFoundViewHelper.GetViewAsync(this));
            }

            var vmParameters = new ErrorPageViewModelBuilderParameters()
            {
                StatusCode  = statusCode,
                Path        = feature?.OriginalPath ?? request.Path,
                PathBase    = feature?.OriginalPathBase ?? request.PathBase,
                QueryString = feature?.OriginalQueryString ?? request.QueryString.Value
            };

            return(await GetErrorView(statusCode, vmParameters));
        }
Beispiel #4
0
        public async Task ExecuteAsync(Controller controller, PageActionRoutingState state)
        {
            // Find a 404 page if a version exists.
            if (state.PageRoutingInfo == null)
            {
                // First check for a rewrite rule and apply it
                state.Result = await GetRewriteResult(controller);

                if (state.Result != null)
                {
                    return;
                }

                // else try and find a 404 page route
                state.PageRoutingInfo = await TryFindNotFoundPageRoute(state.InputParameters.Path, state.VisualEditorMode);

                // If we still can't find a 404, fall back to the generic 404 view
                if (state.PageRoutingInfo == null)
                {
                    state.Result = await _notFoundViewHelper.GetViewAsync();
                }
            }
        }