示例#1
0
        public async Task <IActionResult> OnGetAsync()
        {
            //修改
            if (Id.HasValue)
            {
                var artical = await ArticalService.GetArticalByIdAsync(Id.Value).ConfigureAwait(false);

                //更新文章
                if (artical == null)
                {
                    return(NotFound());
                }

                //禁止修改别人的文章
                if (artical.UserId != CurUserId)
                {
                    return(Forbid());
                }

                AddOrUpdateArtical = new AddOrUpdateArticalModel
                {
                    ClassificationId = artical.ClassificationId,
                    Content          = artical.Content,
                    Title            = artical.Title
                };
            }

            //有发布系统公告权限?
            if ((await AuthorizationService.AuthorizeAsync(User, Permissons.Permisson.Article_System)
                 .ConfigureAwait(false)).Succeeded)
            {
                ArticalClassifications = await ArticalService.GetArticalClassificationsAsync().ConfigureAwait(false);
            }
            else
            {
                ArticalClassifications = (await ArticalService.GetArticalClassificationsAsync()).Where(e => e.Name != "系统公告").ToList();
            }

            return(Page());
        }
示例#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));
        }