8. Action过滤
生活随笔
收集整理的這篇文章主要介紹了
8. Action过滤
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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抽象類,并實現OnActionExecuting 和OnActionExecuted兩個方法。一個示例如下:
public class LoggingFilterAttribute :
{
public override void (FilterExecutingContext filterContext)
{
filterContext.HttpContext.Trace.Write("Starting: " +
filterContext.ActionMethod.Name);
}
public override void (FilterExecutedContext filterContext)
{
if (filterContext.Exception != null)
{
filterContext.HttpContext.Trace.Write("Exception thrown");
}
}
}3. Action過濾器上下文
過濾器上下文包括FilterExecutingContext和FilterExecutedContext兩個,他們都派生自FilterContext類,提供ActionMethod屬性,用于獲取Action方法的信息。
FilterExecutingContext包含一個Cancel屬性,允許你取消正在執行的Action。
FilterExecutedContent包含Exception和ExceptionHandled屬性。若Action執行期間沒有錯誤發生,則Exception屬性為null,若Exception屬性不為null,且其他過濾器已經處理過這個異常,則ExceptionHandled屬性的值為true。
4. 在控制器中使用過濾器
給需要使用過濾器的Action方法加上想要的過濾器Attribute即可。如:
public class HomeController : Controller
{
public void Index()
{
RenderView("Index");
}
}5. 實現“控制器級”的過濾器
可能出現一種情況:控制器中的所有Action方法都需要同一個過濾器。這是可以通過重寫控制器類的OnActionExecuting 和 OnActionExecuted方法來實現過濾器。
6. Action過濾器的范圍
過濾器是可繼承的。
7. 過濾器的執行順序
過濾器提供了Order順序來指定多個過濾器的執行順序。Order的值必須為0或正數,若Order為-1,則表明不指定該過濾器的執行順序,它將在所有被指定順序的過濾器執行之后執行。另外,若兩個過濾器的Order值相同將會產生異常。一個例子如下:
[Filter1()]
[Filter2()]
[Filter3()]
public void Index()
{
RenderView("Index");
}另外,過濾器的兩個方法以及“控制器級”的過濾器的兩個方法之間的執行順序也有規定,詳見原文。
8. 過濾器執行順序的例子
原文: http://quickstarts.asp.net/3-5-extensions/mvc/ActionFiltering.aspx
1. 介紹
一般Action與用戶動作是一對一的關系,用戶的某一個動作對應一個特定的Action.
然而,有時你可能會希望在Action執行的前后執行指定的操作,MVC中可以通過Action過濾器來實現這個功能.
Action過濾器是一個自定義的Attribute,它的應用范圍包括:日志,身份認證和授權,輸出緩存,Web抓取過濾,本地化,動態Action等.
2. 實現一個Action過濾器
Action過濾器必須派生自ActionFilterAttribute抽象類,并實現OnActionExecuting 和OnActionExecuted兩個方法。一個示例如下:
public class LoggingFilterAttribute :
{
public override void (FilterExecutingContext filterContext)
{
filterContext.HttpContext.Trace.Write("Starting: " +
filterContext.ActionMethod.Name);
}
public override void (FilterExecutedContext filterContext)
{
if (filterContext.Exception != null)
{
filterContext.HttpContext.Trace.Write("Exception thrown");
}
}
}3. Action過濾器上下文
過濾器上下文包括FilterExecutingContext和FilterExecutedContext兩個,他們都派生自FilterContext類,提供ActionMethod屬性,用于獲取Action方法的信息。
FilterExecutingContext包含一個Cancel屬性,允許你取消正在執行的Action。
FilterExecutedContent包含Exception和ExceptionHandled屬性。若Action執行期間沒有錯誤發生,則Exception屬性為null,若Exception屬性不為null,且其他過濾器已經處理過這個異常,則ExceptionHandled屬性的值為true。
4. 在控制器中使用過濾器
給需要使用過濾器的Action方法加上想要的過濾器Attribute即可。如:
public class HomeController : Controller
{
public void Index()
{
RenderView("Index");
}
}5. 實現“控制器級”的過濾器
可能出現一種情況:控制器中的所有Action方法都需要同一個過濾器。這是可以通過重寫控制器類的OnActionExecuting 和 OnActionExecuted方法來實現過濾器。
6. Action過濾器的范圍
過濾器是可繼承的。
7. 過濾器的執行順序
過濾器提供了Order順序來指定多個過濾器的執行順序。Order的值必須為0或正數,若Order為-1,則表明不指定該過濾器的執行順序,它將在所有被指定順序的過濾器執行之后執行。另外,若兩個過濾器的Order值相同將會產生異常。一個例子如下:
[Filter1()]
[Filter2()]
[Filter3()]
public void Index()
{
RenderView("Index");
}另外,過濾器的兩個方法以及“控制器級”的過濾器的兩個方法之間的執行順序也有規定,詳見原文。
8. 過濾器執行順序的例子
轉載于:https://www.cnblogs.com/na57/archive/2008/05/06/1185425.html
總結
以上是生活随笔為你收集整理的8. Action过滤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2008/5/5
- 下一篇: 新的公司:Dendrite