Exemple #1
0
        /// <summary>
        /// 查看某篇文章内容
        /// 2019/5/9
        /// </summary>
        /// <param name="articleID"></param>
        /// <returns>文章信息</returns>
        public async Task <ArticleDetailDto> GetArticleDetail(int articleID)
        {
            Article article = null;

            //Id不能小于等于0
            if (articleID <= 0)
            {
                _logger.LogError("传入文章Id格式错误:" + articleID);
                return(null);
            }

            //将该文章Id和RedisArticle组合,作为Redis键名
            string redisArticleKey = PostConsts.ArticleBaseKey + articleID;

            //存入Redis缓存
            //如果不存在,则执行查询数据库的操作
            article = (Article)await _cacheManager.GetCache(PostConsts.RedisForArticleStore).GetAsync(redisArticleKey, async _ => await _articleRepository
                                                                                                      .FirstOrDefaultAsync(s => s.Id == articleID));

            //更新浏览量
            article.PageView++;
            await _cacheManager.GetCache(PostConsts.RedisForArticleStore).SetAsync(redisArticleKey, article);

            //浏览量每上涨20,更新数据库
            //可切换后台作业程序,一天同步一次数据
            if (article.PageView % 7 == 0)
            {
                await _articleRepository.UpdateAsync(article);
            }

            if (article == null)
            {
                _logger.LogError("查看文章不存在,查看失败");
                return(null);
            }

            //获取文章的路径并提取文件内容、标题等信息
            //AutoMapper
            var articleDetailDto = article.MapTo <ArticleDetailDto>();

            //判断文件是否为txt文档
            if (Path.GetExtension(article.ArticleUrl) != ".txt")
            {
                _logger.LogError("文章格式不支持,查看失败");
                return(null);
            }

            string contentResult = await FileOperate.GetContentByPathAsync(article.ArticleUrl, _logger);

            if (contentResult == "false")
            {
                _logger.LogError("从硬盘读取文章错误,查看失败");
                return(null);
            }

            //在使用decodeURIComponent()函数时,所有的空格会变为加号,所以这里将加号变换为空格
            contentResult = contentResult.Replace("+", " ");

            articleDetailDto.Content = contentResult;
            return(articleDetailDto);
        }