亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET mvc4中的過濾器的使用

2024-07-10 13:32:08
字體:
來源:轉載
供稿:網友

mvc4中的過濾器

過濾器(Filter)把附加邏輯注入到MVC框架的請求處理。實現了交叉關注。

交叉關注:用于整個應用程序,又不適合放在某個局部位置的功能。

過濾器是.NET的注解屬性(Attribute),它們對請求處理管道添加了額外的步驟。

注解屬性是派生于System.Attribute的特殊的.NET類。

可以被附加到類、方法、屬性、字段等代碼元素上。其目的是把附加信息嵌入到已編譯的代碼中,以便在運行時讀回這些信息。

過濾器的基本類型:

 

過濾器類型

接口

默認實現

描述

Authorization

IAuthorizationFilter

AuthorizationAttribute

最先運行

Action

IActionFilter

ActionFilterAttribute

在動作方法前后運行

Result

IResultFilter

ActionResultAttribute

在動作結果被執行前后

Exception

IExceptionFilter

HandlerErrorAttribute

僅在過濾器、動作發生異常時

 

授權過濾器:IAuthorizationFilter

namespace System.Web.Mvc{  // 摘要:定義授權篩選器所需的方法。  public interface IAuthorizationFilter{    // 摘要:在需要授權時調用。    // 參數:filterContext:篩選器上下文。    void OnAuthorization(AuthorizationContext filterContext);  }}

注意:

直接實現接口其實是一件非常危險的事;因此創建一個自定義AuthorizeAttribute子類,再實現授權代碼比較容易。

public class CustomAuthAttribute:AuthorizeAttribute{    /// <summary>    /// 是否對請求進行授權訪問的方式    /// </summary>    /// <param name="httpContext">對請求信息進行訪問的方法</param>    protected override bool AuthorizeCore(HttpContextBase httpContext){      return base.AuthorizeCore(httpContext);    }}

直接實現IAuthorizationFilter接口的主要原因是為了獲取對傳遞給OnAuthorization()的AuthorizationContext的訪問,通過它可以獲得更廣泛的信息(路由細節、當前控制器和動作方法信息)。使用接口的方式不僅有安全風險且讓授權注解屬性中建立的邏輯與控制器緊密的耦合在一起,破壞關注分離,不便于維護。

內建的授權過濾器:

雖然使用了AuthorizeAttribute類作為自定義過濾器的基礎,但其AuthorizeCore()有自己的實現

當直接使用AuthorizeAttribute時,可以使用它的public屬性來指定授權策略

AuthorizeAttribute屬性

 

名稱

類型

描述

Users

String

一個逗號分隔的用戶名列表,指定這些用戶可以訪問動作方法

Roles

String

一個逗號分隔的角色列表,用戶必須至少有一個角色

 

public class HomeController : Controller{    [Authorize(Users ="admin,steve,jacqui",Roles ="admin")]    public ActionResult Index(){      return View();    }}

異常過濾器:

namespace System.Web.Mvc{  // 摘要:定義異常篩選器所需的方法。  public interface IExceptionFilter{    // 摘要:在發生異常時調用。    // 參數:filterContext:    //   篩選器上下文。    void OnException(ExceptionContext filterContext);  }}

當一個未處理的異常出現時,OnException()被調用。該方法的參數是一個ExceptionContext 對象,此對象派生于ControllerContext,并提供了許多有用的屬性。

 

名稱

類型

描述

Controller

ControllerBase

返回請求的控制器對象

HttpContext

HttpContextBase

提供對請求細節的訪問及對響應的訪問

IsChildAction

Bool

若是自動做則返回true

RequestContext

RequestContext

提供對HttpContext和路由數據的訪問

RouteData

RouteData

返回請求的路由數據

 

繼承自ControllerContext的屬性

 

名稱

類型

描述

ActionDescripter

ActionDescripter

提供動作方法的細節

Result

ActionResult

用于動作方法的結果,通過非空值可取消請求

Exception

Exception

未處理的異常

ExceptionHandled

Bool

如果另一個過濾器已經把這個異常標記為已處理則返回true

 

實現自定義異常過濾器

public class RangeExceptionAttribute : FilterAttribute, IExceptionFilter{    public void OnException(ExceptionContext filterContext){}}

使用內建的異常過濾器:

HandleErrorAttribute屬性

 

名稱

類型

描述

ExceptionType

Type

由過濾器處理的異常類型

View

String

該過濾器渲染的視圖模板名

Master

String

在渲染這個過濾器的視圖時使用的布局名稱

 

準備工作:

在web.config文件中啟用自定義錯誤時,HandleErrorAttribute過濾器才會生效,在<system.web>節點中添加一個customErrors屬性即可;

<system.web> <!--定制錯誤頁aa.html-->  <customErrors mode="On" defaultRedirect="/Content/aa.html" /> </system.web>

Mode屬性的默認值是RemoteOnly在開發期間,HandleErrorAttribute將不會攔截異常,但當應用程序部署到產品服務器時,并從另一臺計算機發出請求時HandleErrorAttribute變生效

 [HandleError(ExceptionType =typeof(ArgumentNullException),View ="Null")]    public ActionResult Index(){      return View();  }

在渲染視圖時HandleErrorAttribute過濾器會傳遞一個HandleErrorInfo視圖模型對象這是一個封裝了異常細節的封裝程序

 

名稱

類型

描述

ActionName

String

返回生成異常的Action名稱

ControllerName

String

返回生成異常的Controller名稱

Exception

Exception

返回此異常

 

@model HandleErrorInfo@{   ViewBag.Title = "Sorry";}<!DOCTYPE html><html><head>  <meta name="viewport" content="width=device-width" /></head><body>@Model.Exception.StackTrace</body></html>

 備注:使用HandleError過濾器時一定要包含Model.Exception.StackTrace否則視圖不會顯示給用戶,引用沒必要給用戶展示堆棧信息所以可以將該值放入div并隱藏

 動作過濾器

用于任何目的的多用途過濾器

namespace System.Web.Mvc{  // 摘要:定義操作篩選器中使用的方法。  public interface IActionFilter{    // 摘要:在執行操作方法后調用。    // 參數:filterContext:    //   篩選器上下文。    void OnActionExecuted(ActionExecutedContext filterContext);    // 摘要:在執行操作方法之前調用。    // 參數:filterContext:    //   篩選器上下文。    void OnActionExecuting(ActionExecutingContext filterContext);  }}

ActionExecutingContext 屬性

 

名稱

類型

描述

ActionDescriptor

ActionDescriptor

動作方法的描述

Result

ActionResult

動作方法的結果,設置屬性非空值,過濾器可以取消請求

 

ActionExecutedContext 屬性

 

名稱

類型

描述

ActionDescriptor

ActionDescriptor

動作方法的描述

Canceled

Bool

如果該動作被另一個過濾器取消,則返回true

Exception

Exception

返回由另一個過濾器或動作方法拋出的異常

ExceptionHandled

Bool

如果異常被處理返回true

Result

ActionResult

 

 

結果過濾器:

它會對動作方法所產生的結果進行操作

namespace System.Web.Mvc{  // 摘要:定義結果篩選器所需的方法。  public interface IResultFilter{    // 摘要:在操作結果執行后調用。    // 參數:filterContext:    //   篩選器上下文。    void OnResultExecuted(ResultExecutedContext filterContext);    // 摘要:在操作結果執行之前調用。    // 參數:filterContext:    //   篩選器上下文。    void OnResultExecuting(ResultExecutingContext filterContext);  }}

動作方法如何返回動作結果,讓用戶能夠將動作方法的意圖與動作方法的執行分離。將結果過濾器運用于一個動作方法時會在動作方法返回結果時、但在執行該動作結果之前調用OnResultExecuting。動作結果執行之后調用OnResultExecuted

內建的動作過濾器和結果過濾器

Mvc框架包含一個內建的類,可以用來創建動作過濾器和結果過濾器,這個類的名稱ActionFilterAttribute

namespace System.Web.Mvc{  // 摘要:表示篩選器特性的基類。  public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter{    // 摘要:在執行操作方法后由 ASP.NET MVC 框架調用。    // 參數:filterContext:    //   篩選器上下文。    public virtual void OnActionExecuted(ActionExecutedContext filterContext);    // 摘要:在執行操作方法之前由 ASP.NET MVC 框架調用。    // 參數:filterContext:    //   篩選器上下文。    public virtual void OnActionExecuting(ActionExecutingContext filterContext);    // 摘要:在執行操作結果后由 ASP.NET MVC 框架調用。    // 參數:filterContext:    //   篩選器上下文。    public virtual void OnResultExecuted(ResultExecutedContext filterContext);    // 摘要:在執行操作結果之前由 ASP.NET MVC 框架調用。    // 參數:filterContext:    //   篩選器上下文。    public virtual void OnResultExecuting(ResultExecutingContext filterContext);  }}

 使用這個類的唯一好處是不需要重寫和實現不打算使用的方法。除此之外,直接實現過濾器接口沒有任何好處

自定義實例:

public class ProfileAllAttribute: ActionFilterAttribute{    private Stopwatch timer;    public override void OnActionExecuting(ActionExecutingContext filterContext){      timer = Stopwatch.StartNew();    }     public override void OnActionExecuted(ActionExecutedContext filterContext){      timer.Stop();      filterContext.HttpContext.Response.Write(        string.Format("<div>Total elapsed time:{0}</div>", timer.Elapsed.TotalSeconds));    }}public class HomeController : Controller{    [ProfileAll]    public ActionResult Index(){ return View();}}

其它過濾器屬性:

public abstract class Controller : ControllerBase, IActionFilter, IAuthenticationFilter, IAuthorizationFilter, IDisposable, IExceptionFilter, IResultFilter, IAsyncController, IController, IAsyncManagerContainer

過濾器的幾種實現形式:

①全局過濾器

在FilterConfig中直接注冊實現類

②實現接口

③注解

對過濾器執行排序

過濾器是按類型執行的其順序:授權-》Action-》result。如果有未處理異常,框架在任一階段都會執行異常過濾器

namespace System.Web.Mvc{  // 摘要:表示操作和結果篩選器特性的基類。  public abstract class FilterAttribute : Attribute, IMvcFilter{    // 摘要: 獲取或設置一個值,該值指示是否可指定篩選器特性的多個實例。    // 返回結果:如果可指定篩選器特性的多個實例,則為 true;否則為 false。    public bool AllowMultiple { get; }    // 摘要: 獲取或者設置執行操作篩選器的順序。    // 返回結果:執行操作篩選器的順序。    public int Order { get; set; }  } }

內建過濾器

 

過濾器

描述

RequireHttps

強迫Action使用Https協議

OutputCache

緩存一個Action的

ValidateInputand

ValidationAntiForgeryToken

與安全性有關的授權過濾器

AsyncTimeout

NoAsyncTimeout

用戶異步控制器

ChildActionOnlyAttribute

一個支持Html.action和Html.RenderAction輔助器方法的過濾器

 

 

RequireHttps

RequireHttps過濾器讓Action強制使用HTTPS協議。他將用戶瀏覽器重定向到同一個動作,但使用‘https://'協議前綴

在形成不安全請求時,重寫HandledNonHttpsRequest(),以創建自定義行為,該過濾器僅用于GET請求,POST則會丟掉數據;該過濾器時授權過濾器

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠久久五月精品中文字幕| 国产视频久久网| 在线观看精品国产视频| 久久久久中文字幕2018| 欧美日韩在线视频观看| 日韩中文在线中文网在线观看| 久久精品国产清自在天天线| 2018中文字幕一区二区三区| 亚洲精品999| 亚洲级视频在线观看免费1级| 国产精品久久久久久久电影| 国产一区二区色| 久久久99免费视频| 亚洲美女精品久久| 精品丝袜一区二区三区| 色老头一区二区三区| 国产精品成av人在线视午夜片| 国产精品一区二区久久国产| 国产日韩av在线| 亚洲女人被黑人巨大进入al| 久久国产精品久久久| 国产精品久久久久一区二区| 久久久久999| 亚洲欧美另类在线观看| 欧美日韩在线免费| 欧美高跟鞋交xxxxxhd| 国产精品毛片a∨一区二区三区|国| 成人美女免费网站视频| 日本不卡免费高清视频| 国产精品扒开腿做爽爽爽男男| 国产午夜精品美女视频明星a级| 91国产美女视频| 日韩电影在线观看永久视频免费网站| 日韩在线观看免费| 欧美精品videossex88| 欧美性在线视频| 国产精品嫩草影院一区二区| 精品人伦一区二区三区蜜桃网站| 91色p视频在线| 国产精品人成电影在线观看| 欧美日韩在线另类| 欧美第一黄色网| 欧美裸体xxxxx| 91久久精品日日躁夜夜躁国产| 亚洲一区二区自拍| 日韩在线观看电影| 精品无人区太爽高潮在线播放| 人人澡人人澡人人看欧美| 日本国产一区二区三区| 国产美女精品视频免费观看| www.亚洲男人天堂| 日本久久精品视频| 另类视频在线观看| 国产综合香蕉五月婷在线| 久久在精品线影院精品国产| 欧美成人黄色小视频| 91精品国产99| 92福利视频午夜1000合集在线观看| 精品中文字幕在线观看| 欧美黄网免费在线观看| 日韩在线国产精品| 久久精品国产久精国产一老狼| 91视频九色网站| 亚洲第一综合天堂另类专| 成人黄在线观看| 伊人久久综合97精品| 久久成人综合视频| 91久久精品国产91久久| 色噜噜狠狠色综合网图区| 久久久精品久久久久| 国产精品十八以下禁看| 久久精品99国产精品酒店日本| 久热精品视频在线免费观看| 国产视频丨精品|在线观看| 一区二区三区 在线观看视| 久久这里有精品视频| www.欧美精品一二三区| 亚洲色图第一页| 精品国产福利在线| 在线日韩中文字幕| 热久久免费视频精品| 午夜精品久久久久久99热软件| 国产精品美女在线| 国产欧美日韩中文| 精品人伦一区二区三区蜜桃免费| 国内精品久久影院| 亚洲va久久久噜噜噜| 97久久久免费福利网址| 亚洲国产高清福利视频| 日本国产欧美一区二区三区| 亚洲国产精品免费| 亚洲国产成人久久| 国产精品视频中文字幕91| 97久久超碰福利国产精品…| 成人免费观看49www在线观看| 一区二区在线视频播放| 啊v视频在线一区二区三区| 国产一区二区三区丝袜| 欧美专区在线播放| 欧美国产在线视频| www.色综合| 欧美激情网站在线观看| 久久久久久久97| 中文字幕精品在线视频| 亚洲精品91美女久久久久久久| 久久国产视频网站| 68精品国产免费久久久久久婷婷| 91日韩在线播放| 久久精品在线视频| 亚洲欧美日韩在线一区| 国产精品久久一区主播| 亚洲成人免费在线视频| 国产日产欧美精品| 久久午夜a级毛片| 久久久日本电影| 日韩国产激情在线| 久久久久久久久久久成人| 精品国产拍在线观看| 亚洲自拍偷拍第一页| 欧美黑人狂野猛交老妇| 欧美电影免费观看网站| 日韩欧美高清视频| 一区二区三区动漫| 日韩小视频在线观看| 亚洲欧美另类中文字幕| 一本大道香蕉久在线播放29| 91精品国产高清自在线| 亚洲欧美激情视频| 国产在线观看精品一区二区三区| 日韩av免费在线观看| 国内精品伊人久久| 国产亚洲精品91在线| 疯狂做受xxxx欧美肥白少妇| 91久久综合亚洲鲁鲁五月天| 精品偷拍一区二区三区在线看| 精品网站999www| 精品国产欧美一区二区三区成人| 欧美激情精品久久久久久大尺度| 国产中文字幕日韩| 国产精品99导航| 欧美精品做受xxx性少妇| 奇门遁甲1982国语版免费观看高清| 精品日韩美女的视频高清| 久久久久这里只有精品| 欧美日韩中文在线观看| 国产成人小视频在线观看| 亚洲视频在线观看免费| 中文字幕亚洲欧美一区二区三区| 国产精品美女在线观看| 粉嫩老牛aⅴ一区二区三区| 亚洲图片在区色| 精品无人区乱码1区2区3区在线| 亚洲第一av网站| 亚洲欧洲午夜一线一品| 久久综合色影院| 成人xvideos免费视频| 亚洲国产古装精品网站| 在线精品视频视频中文字幕| 国产日韩在线看| 精品在线观看国产| 日韩成人黄色av| 久久亚洲精品小早川怜子66| 久久久中精品2020中文| 91成人在线观看国产|