您的位置:首页 > 其它

MVC——ActionFilterAttribute

2016-10-13 16:13 337 查看
MVC的Action执行前后,有四个事件,可以override,已达到一些特殊的处理需求

自定义特性

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Gzh.MvcWeb.Utility.Filter
{
public class MyActionFilterAttribute : ActionFilterAttribute
{
/*
在MVC的Action执行前后,有四个事件,可以override

OnActionExecuting  在action method调用前发生。
OnActionExecuted   在action method调用后发生, 但是在result执行前发生 (在 view 呈现前)
OnResultExecuting  在result执行前发生(在view 呈现前)
OnResultExecuted   在result执行后发生(在view 呈现后)

*/

private Stopwatch timer = new Stopwatch();

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string UserAgent = filterContext.HttpContext.Request.UserAgent.ToString();
filterContext.HttpContext.Response.Write("<div>" + UserAgent + "</div>");
}

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("end");
}

public override void OnResultExecuting(ResultExecutingContext filterContext)
{
timer.Start();
filterContext.HttpContext.Response.Write("<div>这里是OnResultExecuting</div>");
}

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
timer.Stop();
string message = string.Format("<div>这里是OnResultExecuted: {0}</div>", timer.ElapsedMilliseconds);
filterContext.HttpContext.Response.Write(message);
}
}
}


控制器

using Gzh.MvcWeb.Utility.Filter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Gzh.MvcWeb.Controllers
{
public class TestController : Controller
{
[MyActionFilterAttribute]
public ActionResult Index()
{
return View();
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mvc