Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        //添加/更新文章
        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));
        }