您的位置:首页 > 编程语言 > ASP

ASP.NET MVC——自定义过滤器Filter

2019-04-08 19:10 387 查看

简介:过滤器是对控制器方法前或者后添加的一些判断、本文主要介绍自定义过滤器

1.过滤器的分类

①Authorize(授权):该过滤器用来限制进入控制器的行为

②HandleError(处理错误):该过滤器用来制定一个行为、该行为用来处理某个方法中跑出的异常

2.过滤器的三种应用方式

1.应用到动作方法上:作用于该动作方法

2.应用到控制器上:作用于所有动作方法

3.应用到整个程序中:作用于所有动作方法

[code]     filters.Add(new HandleErrorAttribute());

3.自定义过滤器必须满足的条件

1)实现任意一个或多个过滤器接口

2)继承FilterAttribue类

3)实现如下

[code]  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.作为特性添加在某个控制器方法上

[code]      [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.在控制器中重写过滤器方法优先级最高

本文作为学习记录、如有错误之处请斧正。

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