Пример #1
0
        public async Task <RedirectResult> Get([FromQuery] GetRequest request)
        {
            var site = await _siteRepository.GetAsync(request.SiteId);

            var redirectUrl = await _pathManager.GetIndexPageUrlAsync(site, false);

            var channelId = request.ChannelId;

            if (channelId == 0)
            {
                channelId = request.SiteId;
            }

            if (request.SpecialId != 0)
            {
                await _createManager.ExecuteAsync(request.SiteId, CreateType.Special, 0, 0, 0, request.SpecialId);
            }
            else if (request.FileTemplateId != 0)
            {
                await _createManager.ExecuteAsync(request.SiteId, CreateType.File, 0, 0, request.FileTemplateId, 0);
            }
            else if (request.ContentId != 0)
            {
                await _createManager.ExecuteAsync(request.SiteId, CreateType.Content, channelId, request.ContentId, 0, 0);
            }
            else if (channelId != 0)
            {
                await _createManager.ExecuteAsync(request.SiteId, CreateType.Channel, channelId, 0, 0, 0);
            }
            else if (request.SiteId != 0)
            {
                await _createManager.ExecuteAsync(request.SiteId, CreateType.Channel, request.SiteId, 0, 0, 0);
            }

            if (request.IsRedirect)
            {
                var channelInfo = await _channelRepository.GetAsync(channelId);

                if (request.SpecialId != 0)
                {
                    redirectUrl = await _pathManager.GetFileUrlAsync(site, request.SpecialId, false);
                }
                else if (request.FileTemplateId != 0)
                {
                    redirectUrl = await _pathManager.GetFileUrlAsync(site, request.FileTemplateId, false);
                }
                else if (request.ContentId != 0)
                {
                    var contentInfo = await _contentRepository.GetAsync(site, channelInfo, request.ContentId);

                    redirectUrl = await _pathManager.GetContentUrlAsync(site, contentInfo, false);
                }
                else if (channelId != 0)
                {
                    redirectUrl = await _pathManager.GetChannelUrlAsync(site, channelInfo, false);
                }
                else if (request.SiteId != 0)
                {
                    redirectUrl = await _pathManager.GetIndexPageUrlAsync(site, false);
                }

                if (!string.IsNullOrEmpty(redirectUrl))
                {
                    var parameters = new NameValueCollection();
                    if (!string.IsNullOrEmpty(request.ReturnUrl) && request.ReturnUrl.StartsWith("?"))
                    {
                        parameters = TranslateUtils.ToNameValueCollection(request.ReturnUrl.Substring(1));
                    }

                    parameters["__r"] = StringUtils.GetRandomInt(1, 10000).ToString();

                    redirectUrl = PageUtils.AddQueryString(redirectUrl, parameters);
                }
            }

            return(Redirect(redirectUrl));
        }