MVC Filter 是典型的AOP应用,对MVC框架处理客户端请求注入额外的一些逻辑,如日志记录、缓存处理、异常处理和权限验证,性能检测(横切关注点),而这些逻辑通常与主要业务无关,被独立分开作为公用的部分,降低模块之间的耦合度 。

ASP.NET MVC 有四种基本过滤器

过滤器类型

接口

默认实现

描述

Authorization

IAuthorizationFilter

AuthorizationAttribute

最先运行,在任何其他过滤器或动作方法之前

Action

IActionFilter

ActionFilterAttribute

在动作方法前后运行

Result

IResultFilter

ActionResultAttribute

在动作结果被执行前后

Exception

IExceptionFilter

HandlerErrorAttribute

仅在过滤器、动作发生异常时

示例代码

Authorization:输入的名称为空则直接跳转页面

public class MyAuthorizeFliter:AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var Name = System.Web.HttpContext.Current.Request.QueryString["name"];
var IP = System.Web.HttpContext.Current.Request.UserHostAddress; if (string.IsNullOrEmpty(Name))
{
filterContext.Result = new RedirectResult("/Index/Msg");
//filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new { controller = "Index", action = "Msg" }));
//filterContext.HttpContext.Response.Redirect("/Index/Msg", true);
//filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Index", action = "Msg" }));
}
//base.OnAuthorization(filterContext);
}
}

Action和Result

控制器代码

        [MyActionFilter]
[Route("Index/PostMethod")]
public ActionResult PostMethod()
{
var aa = Request.QueryString["name"];
Logs.WriteLine("正常执行。。。");
return View("Success");
}

过滤器

 public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Logs.WriteLine("执行前。。。" + DateTime.Now.ToString());
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Logs.WriteLine("执行后。。。");
base.OnActionExecuted(filterContext);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Logs.WriteLine("结果前。。。");
base.OnResultExecuting(filterContext);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Logs.WriteLine("结果后。。。");
base.OnResultExecuted(filterContext);
}

运行结果:


Exception

 public class MyExceptionFilter:HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
Exception ex = filterContext.Exception;
Logs.WriteLine("出错了"+ex.Message);
base.OnException(filterContext);
}
}

加入自定义过滤器

可以加在三个地方

1.一个是控制器的上方,(控制器下所有的action将注入过滤器)如下代码:

 [MyExceptionFilter]
public class IndexController : Controller
{
// GET: Index
[HttpGet]
public ActionResult Home()
{
return View("Home");
}
}

2.指定action方法

[MyAuthorizeFliter]
public ActionResult PostMethod()
{
return View("Success");
}

3.全局,在App_Start下的FilterConfing添加代码,如果是WebApi则是要添加到WebApiConfig.cs

 public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}

学习之-ASP.NET MVC Filter的更多相关文章

  1. ASP.Net MVC Filter验证用户登录

    一.Filter是什么 ASP.NetMVC模式自带的过滤器Filter,是一种声明式编程方式,支持四种过滤器类型,各自是:Authorization(授权),Action(行为),Result(结果 ...

  2. IoC容器Autofac(5) - Autofac在Asp.net MVC Filter中的应用

    Autofac结合EF在MVC中的使用,上一篇IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)已经介绍了.但是只是MVC中Co ...

  3. 学习“迷你ASP.NET MVC框架”后的小结

    看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...

  4. 源码学习之ASP.NET MVC Application Using Entity Framework

    源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...

  5. ASP.NET MVC Filter的思考

    思考了一下AOP的具体实现,后来想到ASP.NET MVC过滤器其实就是AOP的一种,于是从Filter下手研究AOP. 暂时先考虑AuthorizationFilter,ActionFilter,R ...

  6. Asp.net Mvc (Filter及其执行顺序)

    应用于Action的Filter 在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能判断登录与否或用户权限,决策输出缓存,防盗链,防蜘蛛,本地化设置,实现动态Actionfi ...

  7. ASP.NET MVC Filter

    http://stackoverflow.com/questions/6940371/asp-net-mvc-request-filters http://afana.me/post/aspnet-m ...

  8. Asp.Net MVC Filter 实现方式和作用范围控制

    MVC中的Filte 简单又优雅的实现了AOP ,在日志,权限,缓存和异常处理等方面用的比较多.但本文不是讨论Filter这些功能点,而是总结Filter实现的方式.说实现也不太准确,也就是它的呈现方 ...

  9. 自定义asp.net mvc Filter 过滤器

    1新建一个mvc项目:如图 2.主要创建下面一些类文件 1.utility目录 放置自定义的过滤器 using System; using System.Collections.Generic; us ...

随机推荐

  1. Java微信开发_02_本地服务器映射外网

    一.工具列表 内网穿透的相关工具有: (1)natapp 官网 :https://natapp.cn/ (2)花生壳 官网:https://console.oray.com/ (2)ngrok 官网: ...

  2. linux文件系统目录解析

    Linux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的.各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差 ...

  3. NYOJ 5 Binary String Matching

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Given two strings A and B, whose alp ...

  4. Eclipse的操作技巧

    网上已经有很多这类文章了,而且写的很全. 我最近刚开始使用Eclipse,写这篇文章的目的是在熟悉的过程中慢慢添加我用着顺手的一些技巧,以免因为某些原因更换开发环境后会忘记. 一.设置:窗口-首选项- ...

  5. 使用ExpressionVisitor进行lambadaExpression的动态拼接

    现有如下实体 public class User { public int Id { get; set; } public string Name { get; set; } } 根据这个实体创建一个 ...

  6. kali linux 2.0下搭建DVWA渗透测试演练平台

    DVWA (Dam Vulnerable Web Application)DVWA是用PHP+MySQL编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序.包含了SQL注入.XSS.盲注等常 ...

  7. Bresenham画椭圆算法

    这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步. 算法步骤: (1) 输入椭圆的长半轴a和短半轴b. (2) 计算初始值 ...

  8. Python 文本和字节序列

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } Python 3 明确区分了人类可读的文本字符串和原始的字节序列.隐式 ...

  9. SLF4J源码解析-LoggerFactory(二)

    承接前文SLF4J源码解析-LoggerFactory(一),本文则主要针对获取ILoggerFactory对象作下简单的分析 LoggerFactory#getILoggerFactory() 源码 ...

  10. Mysql中较为复杂的分组统计去重复值

    这是我的代码: 前提是做了一个view:att_sumbase 首先分开统计每天的中午.下午饭点人数,这时需要分别去除中午和下午重复打卡的人.用了记录集的交,嵌套select的知识. 注意不能直接使用 ...