YbRapidSolution.MVC项目首页缓存没有起作用

Response.Cache.SetOmitVaryStar(true);

文件方面的内容,增加了这个语句

没有的话缓存没起作用,增加这个语句可提高系统性能。

HomeController:

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

using System.IO;

using System.Linq;

using System.Reflection;

using System.Web;

using System.Web.Mvc;

using Glimpse.Mvc.Message;

using Yb.Data.Provider;

using YbRapidSolution.Cms.Drawing;

using YbRapidSolution.Core.IO;

using YbRapidSolution.Entities;

using YbRapidSolution.Mvc.Models;

using YbRapidSolution.Presenter;

using YbRapidSolution.Presenter.Controllers;

using YbRapidSolution.Services;

using YbRapidSolution.Services.Cms;



namespace YbRapidSolution.Mvc.Controllers.Security

{

    [AllowAnonymous]

    public class HomeController : Controller

    {

        #region 字段



        private readonly ICmsColumnService _colService;

        private readonly ICmsSettingService _settingService;

        private readonly ICmsPostService _postService;

        private readonly ICmsPollService _pollService;

        private readonly ICmsContentService _contentService;

        private readonly ICmsCommentService _commentService;

        private readonly IMediaProvider _mediaProvider;

        private readonly IMediaCacheProvider _mediaCacheProvider;



        #endregion



        #region 构造器



        public HomeController(ICmsColumnService colService,

            ICmsContentService contentService,

            ICmsCommentService commentService,

            IMediaProvider mediaProvider,

            IMediaCacheProvider mediaCacheProvider,

            ICmsSettingService settingService, 

            ICmsPostService postService,

            ICmsPollService pollService)

        {

            _colService = colService;

            _settingService = settingService;

            _contentService = contentService;

            _commentService = commentService;

            _mediaProvider = mediaProvider;

            _mediaCacheProvider = mediaCacheProvider;

            _postService = postService;

            _pollService = pollService;

        }



        #endregion



        #region 私有方法



        private void SetService()

        {

            ViewBag.CmsSettingService = _settingService;

            ViewBag.CmsColumnService = _colService;

            ViewBag.CmsContentService = _contentService;

            ViewBag.CmsPostService = _postService;

            ViewBag.CmsPollService = _pollService;

            ViewBag.CmsCommentService = _commentService;

        }



        #endregion



        #region 首页方法



        // GET: /Logon/

        [AllowAnonymous]

        public ActionResult Index()

        {

            var setting =_settingService.Load();

            var home = _colService.GetHomeColumn() 

                ?? new CmsColumn();



            var model = setting.GetPageModel(home);

            if (this.TempData.ContainsKey("HideLogin"))

            {

                model.HideLogin = (bool)this.TempData["HideLogin"];

            }

            else

            {

                model.HideLogin=false;

            }

            model.NavColumnId = model.ID;

            model.CurColumnId = model.ID;

            SetService();

            return View(model);

        }



        [AllowAnonymous]

        public ActionResult Dashboard()

        {

            this.TempData["HideLogin"] = true;

            return RedirectToAction("Index");

        }



        #endregion



        #region 页面方法



        [AllowAnonymous]

        public ActionResult ColumnPage(string columnId,string navToId,int pageIndex=0)

        {

            var column = _colService.GetById(columnId);

            if (column == null)

                return RedirectToAction("Index");

            if (column.IsRedirect && !string.IsNullOrWhiteSpace(column.RedirectUrl))

            {

                return Redirect(column.RedirectUrl);

            }

            var path = "";

            switch (column.TemplateType)

            {

                case 0:

                    path = column.CoverTemplatePath;

                    break;

                case 1:

                    path = column.ListTemplatePath;

                    break;

                case 2:

                    path = column.ContentTemplatePath;

                    break;

                case 3:

                    path = column.SearchTemplatePath;

                    break;

            }

            if (string.IsNullOrWhiteSpace(path))

            {

                return RedirectToAction("Index");

            }

            var setting = _settingService.Load();

            var model = setting.GetPageModel(column);

            model.CurColumnId = columnId;

            model.NavColumnId = navToId;

            model.PageIndex = pageIndex;

            SetService();

            return View(path, model);

        }

        /// <summary>

        /// 内容页

        /// </summary>

        /// <param name="columnId"></param>

        /// <param name="navToId"></param>

        /// <returns></returns>

        [AllowAnonymous]

        public ActionResult ContentPage(string id,string columnId, string navToId)

        {

            var column = _colService.GetById(columnId);

            if (column == null)

                return RedirectToAction("Index");

            if (column.IsRedirect && !string.IsNullOrWhiteSpace(column.RedirectUrl))

            {

                return Redirect(column.RedirectUrl);

            }

            var path = "";

            switch (column.TemplateType)

            {

                case 0:

                    path = column.CoverTemplatePath;

                    break;

                case 1:

                    path = column.ContentTemplatePath;

                    break;

            }

            if (string.IsNullOrWhiteSpace(path))

            {

                return RedirectToAction("Index");

            }

            var setting = _settingService.Load();

            var model = setting.GetPageModel(column);

            model.CurColumnId = columnId;

            model.NavColumnId = navToId;

            model.CurContentId = id;

            SetService();

            return View(path, model);

        }



        #endregion



        #region 评论操作



        /// <summary>

        /// 添加评论

        /// </summary>

        /// <returns></returns>

        [AllowAnonymous]

        [ValidateInput(false)]

        public JsonResult AddComment(CmsComment comment)

        {

            var result = new EasyUIMessage();

            ViewBag.CmsCommentService = _commentService;

            comment.ID = Guid.NewGuid().ToIdString();

            comment.CreatedDate = DateTime.Now;

            comment.CreatedFName = User.Identity.Name;

            

            var validResult = _commentService.Validate(comment);

            if (!validResult.IsValid)

            {

                result.success = false;

                result.msg = validResult.Errors[0].ErrorMessage;

                return Json(result);

            }

            var userReplyAudit = _settingService.Load().UserReplyAudit;

            comment.Cmd =  userReplyAudit ? Cmd.Save : Cmd.Publish;

            try

            {

                _commentService.Insert(comment);

                comment.Body = "";

                

                result.msg = userReplyAudit ? "评论提交成功,需管理员审核通过后才能显示" : "评论提交成功";

                result.success = true;

            }

            catch (Exception ex)

            {

                result.success = false;

                result.msg = ex.Message;

            }

            return Json(result);

        }

        /// <summary>

        /// 添加评论

        /// </summary>

        /// <returns></returns>

        [AllowAnonymous]

        public PartialViewResult CommentList(string parentId, int pageSize = 20, int pageIndex = 0, string targetId=null)

        {

            ViewBag.PageIndex = pageIndex;

            ViewBag.CmsCommentService = _commentService;

            var items = _commentService.FindBy(c => c.ParentId == parentId, false,

                pageIndex, pageSize, c => c.OrderByDescending(d => d.CreatedDate));

            var model = new CmsPagerDataModel()

                {

                    Data = items,

                    ActionName=this.RouteData.Values["action"].ToString(),

                    ControllerName= this.RouteData.Values["controller"].ToString(),

                    RouteValues = new { parentId, targetId },

                    TargetId=targetId

                };

            SetService();

            return PartialView("_CommentList", model);

        }



        #endregion



        #region 文件操作



        [AllowAnonymous]

        [OutputCache(Duration = 600)]

        public FileResult GetImg(string id)

        {

            return GetFile(id);

        }

        /// <summary>

        /// Gets the thumbnail for the embedded resource with the given id. The thumbnail

        /// resources are specified in Piranha.Drawing.Thumbnails.

        /// </summary>

        /// <param name="id">Content id</param>

        /// <param name="size">The desired size</param>

        //[YbMvcAuthorize()]

        [AllowAnonymous]

        [OutputCache(Duration = 600, VaryByParam = "*")]

        public FileResult GetThumbnailBySize(string id, bool draft,int randNum=0, int size = 60)

        {

            return GetThumbnailBy(id,draft,randNum,size,size);

        }

        /// <summary>

        /// Gets the thumbnail for the embedded resource with the given id. The thumbnail

        /// resources are specified in Piranha.Drawing.Thumbnails.

        /// </summary>

        /// <param name="id">Content id</param>

        /// <param name="size">The desired size</param>

        [AllowAnonymous]

        [OutputCache(Duration = 600,VaryByParam="size")]

        public FileResult GetImgBySize(string id, int size = 60)

        {

            return GetThumbnailBySize(id, false, 0, size);

        }

        

        [AllowAnonymous]

        [OutputCache(Duration = 600, VaryByParam = "*")]

        public FileResult GetThumbnailBy(string id, bool draft, int randNum = 0, int width = 60, int height = 60)

        {

            Response.Cache.SetOmitVaryStar(true);

            //首先从缓存中获取

            var data = draft

                ? _mediaCacheProvider.GetDraft(id, width, height)

                : _mediaCacheProvider.Get(id, width, height);



            if (data == null)

            {

                //获取内容

                var content = _contentService.GetById(id, draft);

                if (content != null)

                {

                    Stream strm;

                    if (content.IsFolder)

                    {

                        //为文件夹,加载文件夹图标

                        var resource = Math.Min(width,height) <= 32

                            ? Thumbnails.GetByType("folder-small")

                            : Thumbnails.GetByType("folder");

                        strm = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);

                    }

                    else if (content.ContentKind != ContentKind.Image)

                    {

                        //不为图片,根据类型加载资源图片

                        var type = Thumbnails.ContainsKeyByType(content.ContentType)

                            ? content.ContentType : "default";

                        var resource = Thumbnails.GetByType(type);

                        strm = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);

                    }

                    else

                    {

                        //为图片,根据大下生成缩略图

                        var imgData = draft

                            ? _mediaProvider.GetDraft(id)

                            : _mediaProvider.Get(id);



                        if (imgData == null)

                        {

                            //不存在,使用默认图片

                            var resource = Thumbnails.GetByType("default");

                            strm = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);

                        }

                        else

                        {

                            strm = new MemoryStream(imgData);

                        }

                    }

                    var img = Image.FromStream(strm);

                    img = ImageUtils.Resize(img, width, height);

                    using (var mem = new MemoryStream())

                    {

                        img.Save(mem, ImageFormat.Png);

                        data = mem.ToArray();

                    }

                    strm.Close();

                   

                    if (draft)

                        _mediaCacheProvider.PutDraft(id, data, width, height);

                    else

                        _mediaCacheProvider.Put(id, data, width, height);

                }

            }

            return File(data, "image/png");

        }



        /// <summary>

        /// Gets the thumbnail for the embedded resource with the given id. The thumbnail

        /// resources are specified in Piranha.Drawing.Thumbnails.

        /// </summary>

        /// <param name="id">Content id</param>

        /// <param name="size">The desired size</param>

        [AllowAnonymous]

        [OutputCache(Duration = 600, VaryByParam = "size")]

        public FileResult GetImgBy(string id, int width = 60, int height = 60)

        {

            return GetThumbnailBy(id, false, 0, width, height);

        }



        [AllowAnonymous]

        public FileResult GetFile(string id)

        {

            Response.Cache.SetOmitVaryStar(true);

            var content = _contentService.GetById(id);

            if (content == null || content.IsFolder)

                return null;

            var data=_mediaProvider.Get(id);

            if (data == null)

                return null;

            return File(data, content.ContentType, content.FileName);

        }



        [AllowAnonymous]

        public FileResult GetFileByPath(string fname)

        {

            Response.Cache.SetOmitVaryStar(true);

            var content = _contentService.GetByFName(fname);

            if (content == null || content.IsFolder)

                return null;

            var data = _mediaProvider.Get(content.ID);

            if (data == null)

                return null;

            return File(data, content.ContentType, content.FileName);

        }



        #endregion



        #region 图片轮播



        [AllowAnonymous]

        public PartialViewResult CarouseSide(string fname)

        {

            ViewBag.CmsContentService = _contentService;

            SetService();

            return PartialView("_CarouseSide", fname);

        }



        #endregion



        #region 问卷调查方法



        /// <summary>

        /// 提交问卷调查

        /// </summary>

        /// <returns></returns>

        [AllowAnonymous]

        public PartialViewResult SubmitPoll()

        {

            if (!this.Request.Form.AllKeys.Contains("PollId"))

                return PartialView("_MsgDialog","提交失败:当前问卷调查不存在");

            var pollId = this.Request.Form.Get("PollId");

            if (string.IsNullOrWhiteSpace(pollId))

            {

                return PartialView("_MsgDialog", "提交失败:当前问卷调查不存在");

            }

            var poll = _pollService.GetById(pollId.Trim());

            if (poll==null)

            {

                return PartialView("_MsgDialog", "提交失败:当前问卷调查已被删除");

            }

            var date = DateTime.Now;

            if (!poll.PollPublished

                || (poll.StartDate.HasValue && poll.StartDate.Value > date)

                || (poll.EndDate.HasValue && poll.EndDate.Value < date))

            {

                return PartialView("_MsgDialog", "提交失败:当前问卷调查已关闭");

            }

            string ip="", cookie="", userName="";

            if(poll.LimitIP)

                ip = AccountController.GetIP4Address();

            if (poll.LimitCookie)

            {

                if (Request.Cookies.AllKeys.Contains(poll.ID))

                {

                    return PartialView("_MsgDialog", "提交失败:该问卷调查已提交,不允许重复提交");

                }

                cookie = poll.ID;

            }

                

            if (poll.LimitGuest)

            {

                if(!User.Identity.IsAuthenticated)

                    return PartialView("_MsgDialog", "提交失败:该问卷调查需登录后才能提交");

                userName = User.Identity.Name;

            }

            if (_pollService.Exists(ip, cookie, userName))

            {

                return PartialView("_MsgDialog", "提交失败:该问卷调查已提交,不允许重复提交");

            }

            

            var pollVoting = new CmsPollVoting

            {

                ID = Guid.NewGuid().ToIdString(),

                PollId = poll.ID,

                IP = ip,

                UserName = userName,

                Cookie = cookie,

                CmsPollVotingItem = new List<CmsPollVotingItem>(poll.CmsPollItem.Count)

            };



            foreach (var item in poll.CmsPollItem)

            {

                if (!this.Request.Form.AllKeys.Contains(item.ID))

                {

                    return PartialView("_MsgDialog", string.Format("提交失败:‘{0}’未选择。", item.Name));

                }

                var str = this.Request.Form.Get(item.ID);

                if (string.IsNullOrWhiteSpace(str))

                {

                    return PartialView("_MsgDialog", string.Format("提交失败:‘{0}’可选型未选择。", item.Name));

                }

               

                var votingItem = new CmsPollVotingItem

                {

                    ID = Guid.NewGuid().ToIdString(),

                    PollItemId = item.ID,

                    PollVotingId = pollVoting.ID

                };

                pollVoting.CmsPollVotingItem.Add(votingItem);



                votingItem.CmsPollVotingAnswer = new List<CmsPollVotingAnswer>(item.CmsPollAnswer.Count);

                //获取投票值

                var selectValues = str.Trim().Split(',').Distinct();

                //获取所有可选项

                var allAnswerIds = item.CmsPollAnswer.Select(c => c.ID).ToList();

                var dic=item.CmsPollAnswer.ToDictionary(c => c.ID);

                foreach (var value in selectValues)

                {

                    if (!dic.ContainsKey(value))

                    {

                        return PartialView("_MsgDialog", string.Format("提交失败:‘{0}’可选型未选择不存在。", item.Name));

                    }

                    

                    var votingAnswer = new CmsPollVotingAnswer()

                    {

                        ID = Guid.NewGuid().ToIdString(),

                        PollAnswerId = value,

                        PollVotingItemId = item.ID,

                        Value = dic[value].Value

                    };

                    votingItem.CmsPollVotingAnswer.Add(votingAnswer);

                }

            }

            try

            {

                _pollService.Insert(pollVoting);

                if (cookie != "")

                {

                    HttpCookie curCookie = new HttpCookie(cookie)

                    {

                        Expires = DateTime.Now.AddYears(3)

                    };

                    System.Web.HttpContext.Current.Response.Cookies.Add(curCookie);

                }

                return PartialView("_MsgDialog", "问卷调查提交成功,谢谢您的参与");

            }

            catch(Exception er)

            {

                AuditLogApi.Error(er.Message, er);

                return PartialView("_MsgDialog", "提交失败:系统出现异常,请查看审计日志了解详细信息");

            }

        }

        [AllowAnonymous]

        public PartialViewResult ViewPollResult(string id)

        {

            if (string.IsNullOrWhiteSpace(id))

            {

                return PartialView("_MsgDialog", "当前问卷调查不存在");

            }

            var poll = _pollService.GetById(id.Trim());

            if (poll == null)

            {

                return PartialView("_MsgDialog", "当前问卷调查不存在");

            }

            if (!poll.ResultPublished)

            {

                return PartialView("_MsgDialog", "当前问卷调查暂未发布");

            }

            var total = poll.CmsPollVoting.Count;

            foreach (var item in poll.CmsPollItem)

            {

                foreach (var answer in item.CmsPollAnswer)

                {

                    answer.Count = item.CmsPollVotingItem

                        .SelectMany(c => c.CmsPollVotingAnswer)

                        .Count(c => c.PollAnswerId == answer.ID);

                    answer.Ratio = total == 0 ? 0m : answer.Count / (decimal)total;

                }

            }

            return PartialView("_PollResult", poll);

        }

        #endregion



    }

}

 

你可能感兴趣的:(mvc)