public async Task <IActionResult> OnGetAsync() { //获取这篇文章 Artical = await ArticalService.GetArticalByIdAsync(ArticalId).ConfigureAwait(false); if (Artical == null) { return(NotFound()); } //作者信息 Author = await UserClient.FindByIdAsync(new UserIdReq { UserId = Artical.UserId }); //文章分类信息 ClassificationInfo = await ArticalService.GetArticalClassificationByIdAsync(Artical.ClassificationId).ConfigureAwait(false); //阅读量+1 await ArticalService.UpdateArticalAsync(ArticalId, new UpdateArticalDto { ArticalId = ArticalId, VisitCount = Artical.VisitCount + 1, ClassificationId = Artical.ClassificationId, Content = Artical.Content, Title = Artical.Title }).ConfigureAwait(false); //评论列表 Comments = ArticalService.GetArticalComments(Artical.Id).OrderByDescending(e => e.CommentTime); //评论数量 CommentsCount = await Comments.CountAsync().ConfigureAwait(false); //获取作者其他文章且不包含这篇文章 AuthorOtherArticals = await ArticalService.GetArticlesAsync( articles => { return(articles.Where(e => e.Id != ArticalId).OrderByDescending(e => e.PublishTime)); }, take : 5).ConfigureAwait(false); return(Page()); }
//添加/更新文章 public async Task <IActionResult> OnPostAsync(AddOrUpdateArticalModel AddOrUpdateArtical) { do { //bool isRunning = cac.Get<bool>($"OnPostAddArticalAsync"); //if (isRunning) //{ // ModelState.AddModelError("", "两次发帖时间间隔最短为30秒"); // break; //} //cache.Set($"OnPostAddArticalAsync", true, TimeSpan.FromSeconds(30)); if (!TryValidateModel(AddOrUpdateArtical)) { break; } //给图片添加响应式和水平居中 var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(AddOrUpdateArtical.Content); //htmlDoc = removeNodes(htmlDoc,new string[] { "//iframe", "//ins" }); var imgs = htmlDoc.DocumentNode.SelectNodes("//img"); if (imgs != null) { foreach (var img in imgs) { var src = img.Attributes.FirstOrDefault(e => e.Name == "src"); //移除所有属性 img.Attributes.RemoveAll(); img.AddClass("img-fluid d-block mx-auto"); img.SetAttributeValue("style", "width:90%"); img.SetAttributeValue("src", src.Value); } AddOrUpdateArtical.Content = htmlDoc.DocumentNode.OuterHtml; } if (!Id.HasValue) { Result <long> respone = await ArticalService.AddArticalAsync(new AddArticalDto { UserId = CurUserId, ClassificationId = AddOrUpdateArtical.ClassificationId, Content = AddOrUpdateArtical.Content, Title = AddOrUpdateArtical.Title.Trim() }).ConfigureAwait(false); if (!respone.Succeeded) { ModelState.AddModelError("", respone.ErrorMessage); break; } return(Content($"/Forum/ArticalDetail/{respone.Data}")); } else { var respone = await ArticalService.UpdateArticalAsync(Id.Value, new UpdateArticalDto { ArticalId = Id.Value, Content = AddOrUpdateArtical.Content, ClassificationId = AddOrUpdateArtical.ClassificationId, Title = AddOrUpdateArtical.Title.Trim() }).ConfigureAwait(false); if (!respone.Succeeded) { ModelState.AddModelError("", respone.ErrorMessage); break; } return(Content($"/Forum/ArticalDetail/{Id}")); } } while (false); return(BadRequest(ModelState)); }