MVC静态化页面
来源:互联网 发布:华为云计算 钦州 编辑:程序博客网 时间:2024/05/21 17:39
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Web;
- using System.Web.Mvc;
- namespace WF_HightFood.App_Start
- {
- public class StaticFilterAttribute : ActionFilterAttribute
- {
- public override void OnActionExecuted(ActionExecutedContext filterContext)
- {
- //filterContext.HttpContext.Response.Write("OnActionExecuted</br>");
- base.OnActionExecuted(filterContext);
- }
- public override void OnActionExecuting(ActionExecutingContext filterContext)
- {
- // filterContext.HttpContext.Response.Write("OnActionExecuting</br>");
- base.OnActionExecuting(filterContext);
- }
- public override void OnResultExecuted(ResultExecutedContext filterContext)
- {
- //filterContext.HttpContext.Response.Write("OnResultExecuted</br>");
- if (filterContext.HttpContext.Response.StatusCode == 200)
- {
- filterContext.HttpContext.Response.Filter = new StaticFileWriteResponseFilterWrapper(filterContext.HttpContext.Response.Filter, filterContext);
- }
- // filterContext.HttpContext.Response.Charset = "utf8";
- base.OnResultExecuted(filterContext);
- }
- public override void OnResultExecuting(ResultExecutingContext filterContext)
- {
- // filterContext.HttpContext.Response.Write("OnResultExecuting</br>");
- base.OnResultExecuting(filterContext);
- }
- }
- class StaticFileWriteResponseFilterWrapper : System.IO.Stream
- {
- private Stream inner;
- private FileStream writer;
- private ControllerContext context;
- private int expireSconds;
- private bool filter;
- private string tempPath, path;
- public StaticFileWriteResponseFilterWrapper(System.IO.Stream s, ControllerContext context, int expireSeconds = 600)
- {
- this.filter = false;
- this.inner = s;
- this.context = context;
- this.expireSconds = expireSeconds;
- this.EnsureStaticFile();
- }
- void EnsureStaticFile()
- {
- this.path = this.context.HttpContext.Server.MapPath(HttpContext.Current.Request.Path);
- if (!Path.HasExtension(path))
- {
- return;
- }
- if (!".html".Equals(Path.GetExtension(HttpContext.Current.Request.Path)))
- {
- return;
- }
- if (File.Exists(path))
- {
- var delay = DateTime.UtcNow - File.GetCreationTimeUtc(path);
- if (delay.TotalSeconds <= this.expireSconds)
- {
- return;
- }
- File.Delete(path);
- }
- else
- {
- var dir = Path.GetDirectoryName(path);
- if (!Directory.Exists(dir))
- {
- try
- {
- Directory.CreateDirectory(Path.GetDirectoryName(path));
- }
- catch
- { }
- }
- }
- this.filter = true;
- this.tempPath = this.path + "_" + DateTime.Now.Ticks;
- try
- {
- writer = new FileStream(tempPath, FileMode.Create, FileAccess.Write);
- }
- catch
- {
- this.filter = false;
- }
- }
- public override bool CanRead
- {
- get { return inner.CanRead; }
- }
- public override bool CanSeek
- {
- get { return inner.CanSeek; }
- }
- public override bool CanWrite
- {
- get { return inner.CanWrite; }
- }
- public override void Flush()
- {
- inner.Flush();
- }
- public override long Length
- {
- get { return inner.Length; }
- }
- public override long Position
- {
- get
- {
- return inner.Position;
- }
- set
- {
- inner.Position = value;
- }
- }
- public override int Read(byte[] buffer, int offset, int count)
- {
- return inner.Read(buffer, offset, count);
- }
- public override long Seek(long offset, System.IO.SeekOrigin origin)
- {
- return inner.Seek(offset, origin);
- }
- public override void SetLength(long value)
- {
- inner.SetLength(value);
- }
- public override void Write(byte[] buffer, int offset, int count)
- {
- try
- {
- inner.Write(buffer, offset, count);
- }
- catch (Exception ex)
- {
- }
- try
- {
- this.writer.Write(buffer, offset, count);
- }
- catch (Exception ex)
- {
- }
- }
- protected override void Dispose(bool disposing)
- {
- if (this.filter)
- {
- try
- {
- if (this.writer != null)
- {
- this.writer.Dispose();
- this.writer = null;
- }
- File.Delete(this.path);
- File.Move(this.tempPath, this.path);
- #region 生成文件日志
- #endregion
- }
- catch
- { }
- }
- base.Dispose(disposing);
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.Routing;
- using EnYuan.SMS;
- using YJY.Site.SSO;
- using EnYuan.BSS.User;
- using EnYuan.BSS.User.Dto;
- using WF_HightFood.App_Code;
- namespace WF_HightFood.App_Start
- {
- public class SSOFilterAttribute : ActionFilterAttribute
- {
- public string Message { get; set; }
- public override void OnActionExecuting(ActionExecutingContext filterContext)
- {
- //if (!filterContext.HttpContext.Request.Url.ToString().ToLower().StartsWith("http://www."))
- //{
- // filterContext.HttpContext.Response.Redirect(filterContext.HttpContext.Request.Url.ToString().Replace("http://", "http://www."));
- // return;
- //}
- var sso_cookies = filterContext.HttpContext.Request.Cookies["sso_token"];
- if (sso_cookies == null || sso_cookies.Value == null || sso_cookies.Value.Equals(""))
- {
- //清空所有cookies
- filterContext.HttpContext.Request.Cookies.Clear();
- //如果不存在token,跳转到验证站点进行验证;
- filterContext.HttpContext.Response.Redirect("http://jump.yuan.cn/Home/index/?type=mvc&backurl=" + filterContext.HttpContext.Request.Url.ToString());
- return;
- }
- else
- {
- //如过存在token,检测登录状态
- var userid = ServiceLocator.Create<ISSOService>().CheckUser(sso_cookies.Value);
- if (userid != null)
- {
- if (filterContext.HttpContext.Session["userid"] != userid || filterContext.HttpContext.Session["userid"] == null || filterContext.HttpContext.Session["isVip"] == null || filterContext.HttpContext.Session["username"] == null)
- {
- //用户id
- filterContext.HttpContext.Session["userid"] = userid;
- //取得用户对象
- UserDto userInfo = ServiceLocator.Create<IUserService>().GetUser(userid);
- filterContext.HttpContext.Session["isVip"] = DataAccess.isVip(userid);
- filterContext.HttpContext.Session["username"] = !String.IsNullOrEmpty(userInfo.NickName) ? userInfo.NickName : userInfo.Name;
- }
- }
- else
- {
- filterContext.HttpContext.Session.Clear();
- }
- }
- }
- public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
- {
- base.OnActionExecuted(filterContext);
- // filterContext.HttpContext.Response.Write("Action执行之后" + Message + "<br />");
- }
- public override void OnResultExecuting(ResultExecutingContext filterContext)
- {
- base.OnResultExecuting(filterContext);
- //filterContext.HttpContext.Response.Write("返回Result之前" + Message + "<br />");
- }
- public override void OnResultExecuted(ResultExecutedContext filterContext)
- {
- base.OnResultExecuted(filterContext);
- // filterContext.HttpContext.Response.Write("返回Result之后" + Message + "<br />");
- }
- }
- }
使用方法:
[StaticFilter]
public ActionResult Index()
{
return View();
}
http://blog.csdn.net/lybwwp/article/details/26503765
0 0
- MVC静态化页面
- MVC静态化页面
- MVC静态化页面
- MVC简单生成静态化页面
- sprig mvc+freemarker模板页面静态化
- Spring mvc系列八之 页面静态化(一)
- Spring mvc系列八之 页面静态化(一)
- Spring mvc系列八之 页面静态化(二)
- Spring mvc系列八之 页面静态化(一)
- ASP.NET MVC 页面静态化操作的思路
- Spring mvc系列八之 页面静态化(一)
- Spring mvc系列八之 页面静态化(二)
- ASP.NET MVC使用SSI来实现页面静态化
- MVC路由和静态页面冲突问题
- MVC如何配置才能访问静态页面
- asp.net Mvc 访问静态页面
- MVC静态化
- .net mvc 页面(静态页面)播放 .264格式视频文件
- Eclipse编辑器基本设置
- samba能看到linux中的文件目录,但是看不到文件的解决(查看SElinux状态&关闭SElinux)
- [leetcode]Find Minimum in Rotated Sorted Array II
- keystore文件生成
- linux系统-用户管理-常用命令
- MVC静态化页面
- C# 无边框窗口实现拖动
- AMAZING AUCTION
- 2015 编程之美 2月29日
- 2015编程之美资格赛:2月29日 模拟题
- #1038 : 01背包 ( 01 背包,基础DP)
- 图片识别前奏—计算两幅图片的皮尔逊相关系数
- 第六周 【项目5-友元类】
- 内网渗透应用 跨vlan渗透的一种思路