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=)
{
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 :
path = column.CoverTemplatePath;
break;
case :
path = column.ListTemplatePath;
break;
case :
path = column.ContentTemplatePath;
break;
case :
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 :
path = column.CoverTemplatePath;
break;
case :
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[].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 = , int pageIndex = , 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 = )]
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 = , VaryByParam = "*")]
public FileResult GetThumbnailBySize(string id, bool draft,int randNum=, int size = )
{
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 = ,VaryByParam="size")]
public FileResult GetImgBySize(string id, int size = )
{
return GetThumbnailBySize(id, false, , size);
} [AllowAnonymous]
[OutputCache(Duration = , VaryByParam = "*")]
public FileResult GetThumbnailBy(string id, bool draft, int randNum = , int width = , int height = )
{
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) <=
? 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 = , VaryByParam = "size")]
public FileResult GetImgBy(string id, int width = , int height = )
{
return GetThumbnailBy(id, false, , 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()
};
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 == ? 0m : answer.Count / (decimal)total;
}
}
return PartialView("_PollResult", poll);
}
#endregion }
}
05-07 12:35