@using System.Web.Caching;
|
|
@{
|
|
Page.Title = Blog.Title;
|
|
Layout = "~/themes/" + Blog.Theme + "/_Layout.cshtml";
|
|
DateTime lastModified = DateTime.MinValue;
|
|
|
|
if (string.IsNullOrEmpty(Blog.CurrentSlug))
|
|
{
|
|
Page.ShowPaging = true;
|
|
var posts = Blog.GetPosts(Blog.PostsPerPage);
|
|
|
|
foreach (var post in posts)
|
|
{
|
|
@RenderPage("~/themes/" + Blog.Theme + "/Post.cshtml", post);
|
|
}
|
|
|
|
if (posts.Any())
|
|
{
|
|
lastModified = posts.Max(p => p.LastModified);
|
|
}
|
|
|
|
Response.AddCacheItemDependency("posts");
|
|
Response.Cache.VaryByParams["page"] = true;
|
|
Response.Cache.VaryByParams["category"] = true;
|
|
}
|
|
else
|
|
{
|
|
Post post = Blog.IsNewPost ? new Post() : Blog.CurrentPost;
|
|
|
|
if (Blog.IsNewPost && !User.Identity.IsAuthenticated)
|
|
{
|
|
FormsAuthentication.RedirectToLoginPage();
|
|
}
|
|
|
|
if (post == null) { throw new HttpException(404, "Post not found"); }
|
|
|
|
Page.Title = post.Title;
|
|
lastModified = post.LastModified;
|
|
|
|
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/posts/" + post.ID + ".xml")));
|
|
|
|
@RenderPage("~/themes/" + Blog.Theme + "/Post.cshtml", post)
|
|
}
|
|
|
|
if (!Request.IsLocal)
|
|
{
|
|
Response.Cache.AppendCacheExtension("max-age=0");
|
|
Response.Cache.SetValidUntilExpires(true);
|
|
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
|
|
Response.Cache.SetVaryByCustom("authenticated");
|
|
Response.Cache.VaryByParams["slug"] = true;
|
|
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/")));
|
|
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/scripts")));
|
|
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/css")));
|
|
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/themes/" + Blog.Theme)));
|
|
|
|
Blog.SetConditionalGetHeaders(lastModified, Context);
|
|
}
|
|
}
|