惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
G
GRAHAM CLULEY
H
Hackread – Cybersecurity News, Data Breaches, AI and More
阮一峰的网络日志
阮一峰的网络日志
L
Lohrmann on Cybersecurity
S
Security @ Cisco Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Security Affairs
The Cloudflare Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Spread Privacy
Spread Privacy
Y
Y Combinator Blog
V2EX - 技术
V2EX - 技术
罗磊的独立博客
F
Full Disclosure
Jina AI
Jina AI
S
Schneier on Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CXSECURITY Database RSS Feed - CXSecurity.com
Webroot Blog
Webroot Blog
雷峰网
雷峰网
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recorded Future
Recorded Future
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 三生石上(FineUI控件)
K
Kaspersky official blog
V
Visual Studio Blog
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Tor Project blog
Cloudbric
Cloudbric
Hacker News - Newest:
Hacker News - Newest: "LLM"
爱范儿
爱范儿
L
LINUX DO - 最新话题
GbyAI
GbyAI
Attack and Defense Labs
Attack and Defense Labs
H
Heimdal Security Blog
Recent Announcements
Recent Announcements
L
LINUX DO - 热门话题
L
LangChain Blog
Simon Willison's Weblog
Simon Willison's Weblog

博客园 - Na57

ASP.NET MVC应用中一个诡异错误的处理 使用Enterprise Library 4.0 Logging 的问题 6. 视图和生成助手 5. 控制器和Action方法 2. 创建基本的MVC项目 3. URL路由 - Na57 - 博客园 4. 用MVC实现URL路由 Google笔记本迈向烂笔头 XML and Databases 笔记 烂笔头又来了 - Na57 - 博客园 <程序员>200711期算法擂台的解答 GeoServer抛异常IllegalArgumentException的原因 CSS学习 关于CSS中float属性的理解 ItemCreated与ItemDataBound 《SAML简介:安全地共享数字身份信息》读后感 JavaScript 学习(2) - JS的内建对象 JavaScript from C#(入门篇) 2006.6《程序员》笔记
8. Action过滤
Na57 · 2008-05-06 · via 博客园 - Na57

Action过滤

原文: http://quickstarts.asp.net/3-5-extensions/mvc/ActionFiltering.aspx

1. 介绍
一般Action与用户动作是一对一的关系,用户的某一个动作对应一个特定的Action.
然而,有时你可能会希望在Action执行的前后执行指定的操作,MVC中可以通过Action过滤器来实现这个功能.
Action过滤器是一个自定义的Attribute,它的应用范围包括:日志,身份认证和授权,输出缓存,Web抓取过滤,本地化,动态Action等.

2. 实现一个Action过滤器
Action过滤器必须派生自ActionFilterAttribute抽象类,并实现OnActionExecutingOnActionExecuted两个方法。一个示例如下:

public class LoggingFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(FilterExecutingContext filterContext)
{
filterContext.HttpContext.Trace.Write("Starting: " +
filterContext.ActionMethod.Name);
}

public override void

OnActionExecuted(FilterExecutedContext filterContext)
{
if (filterContext.Exception != null)
{
filterContext.HttpContext.Trace.Write("Exception thrown");
}
}
}

3. Action过滤器上下文
过滤器上下文包括FilterExecutingContext和FilterExecutedContext两个,他们都派生自FilterContext类,提供ActionMethod属性,用于获取Action方法的信息。
FilterExecutingContext包含一个Cancel属性,允许你取消正在执行的Action。
FilterExecutedContent包含ExceptionExceptionHandled属性。若Action执行期间没有错误发生,则Exception属性为null,若Exception属性不为null,且其他过滤器已经处理过这个异常,则ExceptionHandled属性的值为true。

4. 在控制器中使用过滤器
给需要使用过滤器的Action方法加上想要的过滤器Attribute即可。如:

public class HomeController : Controller
{
[LoggingFilter]
public void Index()
{
RenderView("Index");
}
}

5. 实现“控制器级”的过滤器
可能出现一种情况:控制器中的所有Action方法都需要同一个过滤器。这是可以通过重写控制器类的OnActionExecutingOnActionExecuted方法来实现过滤器。

6. Action过滤器的范围
过滤器是可继承的。

7. 过滤器的执行顺序
过滤器提供了Order顺序来指定多个过滤器的执行顺序。Order的值必须为0或正数,若Order为-1,则表明不指定该过滤器的执行顺序,它将在所有被指定顺序的过滤器执行之后执行。另外,若两个过滤器的Order值相同将会产生异常。一个例子如下:

[Filter1(Order = 2)]
[Filter2(Order = 3)]
[Filter3(Order = 1)]
public void Index()
{
RenderView("Index");
}

另外,过滤器的两个方法以及“控制器级”的过滤器的两个方法之间的执行顺序也有规定,详见原文。

8. 过滤器执行顺序的例子