ASP.NET MVC——自定义过滤器Filter
简介:过滤器是对控制器方法前或者后添加的一些判断、本文主要介绍自定义过滤器
1.过滤器的分类
①Authorize(授权):该过滤器用来限制进入控制器的行为
②HandleError(处理错误):该过滤器用来制定一个行为、该行为用来处理某个方法中跑出的异常
2.过滤器的三种应用方式
1.应用到动作方法上:作用于该动作方法
2.应用到控制器上:作用于所有动作方法
3.应用到整个程序中:作用于所有动作方法
filters.Add(new HandleErrorAttribute());
3.自定义过滤器必须满足的条件
1)实现任意一个或多个过滤器接口
2)继承FilterAttribue类
3)实现如下
public class LogExceptionFilter : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
//定义日志文件路径
string filePath = filterContext.HttpContext.Server.MapPath(@"~\log.txt");
//写入日志信息
using (StreamWriter sw = File.AppendText(filePath))
{
sw.WriteLine("时间:{0}", DateTime.Now.ToString());
sw.WriteLine("控制器:{0}", filterContext.RouteData.Values["Controller"]);
sw.WriteLine("动作方法:{0}", filterContext.RouteData.Values["Action"]);
sw.WriteLine("异常信息:{0}", filterContext.Exception.Message);
}
}
}
4.自定义过滤器的使用
1.作为特性添加在某个控制器方法上
[LogExceptionFilter]//在指定的动作方法定义自定义过滤器
[HttpPost]
public ActionResult Register(Customer objCustomer, string validateCode)
{
if (ModelState.IsValid)
{
if (String.Compare(TempData["ValidateCode"].ToString(), validateCode, true) != 0)
{
ModelState.AddModelError("ValidateCode", "验证码不正确,请重新输入!");
return View("Register");
}
CustomerManager cManager = new CustomerManager();
if (!cManager.Register(objCustomer))
{
ModelState.AddModelError("doubleUser", "当前用户名已被使用,请重新输入!");
return View("Register");
}
else
{
return Content("<script>alert('注册成功,请继续购物!');window.location='"
+ Url.Content("~/") + "'</script>");
}
}
else re
5.过滤器的优先级
1.控制器类的过滤器优先于动作方法上的过滤器
2.控制器可以用Order参数进行排序
3.在控制器中重写过滤器方法优先级最高
本文作为学习记录、如有错误之处请斧正。