1、首先定义一个全局类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Web;
using System.Web.Script.Serialization;
using System.Configuration;
using System.Web.Security;
using System.Net;
using System.IO;
using ModelProject;
using System.Web.Routing;
using System.Runtime.Remoting.Contexts;
namespace UtilityBase
{
[AttributeUsage(AttributeTargets.All,
AllowMultiple = true)]
/// <summary>
/// <para> 功|
能:o自?定义?全?局?过y滤?器 </para>
/// <para> 作
者?:o韩?保新? </para>
/// <para> 创建日?期:
2011-7-25 9:39:13 </para>
/// </summary>
public class GloalMvcFiters : ActionFilterAttribute
{
public string Message
{ get; set;
}
private const string WebService_Root
= "WebServiceRoot";
/// <summary>
/// 控?制?器方?法执行D之?后执行D
/// </summary>
/// <param
name="filterContext"></param>
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var fullName
= filterContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;
if (!System.Web.HttpContext.Current.User.Identity.IsAuthenticated
&& !GetList().Contains(fullName))
{
//System.Web.HttpContext.Current.Response.Redirect("~/Account/LogOn",
true);
filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new {
area = "", controller
= "Account",
action = "LogOn" }));
}
}
/// <summary>
/// 控制器方法执行之前执行
/// </summary>
/// <param
name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//var
s = "</br>控制器名称:" + filterContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName + "</br>操作方?法:o" + filterContext.ActionDescriptor.ActionName;
//filterContext.HttpContext.Response.Write(@"<br
/>Before Action Excute" + "\t "+ s +"\t"+ Message);
//filterContext.HttpContext.Response.End();
base.OnActionExecuting(filterContext);
}
/// <summary>
/// 视图加载完成后执行
/// </summary>
/// <param
name="filterContext"></param>
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
//filterContext.HttpContext.Response.Write(@"<br
/>After ViewResult Excute" + "\t " + Message);
base.OnResultExecuted(filterContext);
}
/// <summary>
/// 视图加载之前执行
/// </summary>
/// <param
name="filterContext"></param>
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
//filterContext.HttpContext.Response.Write(@"<br
/>Before ViewResult Excute" + "\t " + Message);
base.OnResultExecuting(filterContext);
}
private List<string>
GetList()
{
List<string>
list = new List<string>();
list.Add("WebUI.Controllers.AccountController");
list.Add("WebUI.Controllers.ErrorController");
return list;
}
}
}
2、Global.asax中注册
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalFilters.Filters.Add(new UtilityBase.GloalMvcFiters()
{ Message = "Gloable" });
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}