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