• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    Asp.Net MVC學(xué)習(xí)總結(jié)之過(guò)濾器詳解

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:35:58
    文檔

    Asp.Net MVC學(xué)習(xí)總結(jié)之過(guò)濾器詳解

    Asp.Net MVC學(xué)習(xí)總結(jié)之過(guò)濾器詳解: 一、過(guò)濾器簡(jiǎn)介 1.1、理解什么是過(guò)濾器 1、過(guò)濾器(Filters)就是向請(qǐng)求處理管道中注入額外的邏輯。提供了一個(gè)簡(jiǎn)單而優(yōu)雅的方式來(lái)實(shí)現(xiàn)橫切關(guān)注點(diǎn)。 2、所謂的過(guò)濾器(Filters),MVC框架里面的過(guò)濾器完全不同于ASP.NET平臺(tái)里面的Request.Filte
    推薦度:
    導(dǎo)讀Asp.Net MVC學(xué)習(xí)總結(jié)之過(guò)濾器詳解: 一、過(guò)濾器簡(jiǎn)介 1.1、理解什么是過(guò)濾器 1、過(guò)濾器(Filters)就是向請(qǐng)求處理管道中注入額外的邏輯。提供了一個(gè)簡(jiǎn)單而優(yōu)雅的方式來(lái)實(shí)現(xiàn)橫切關(guān)注點(diǎn)。 2、所謂的過(guò)濾器(Filters),MVC框架里面的過(guò)濾器完全不同于ASP.NET平臺(tái)里面的Request.Filte

     一、過(guò)濾器簡(jiǎn)介

    1.1、理解什么是過(guò)濾器

    1、過(guò)濾器(Filters)就是向請(qǐng)求處理管道中注入額外的邏輯。提供了一個(gè)簡(jiǎn)單而優(yōu)雅的方式來(lái)實(shí)現(xiàn)橫切關(guān)注點(diǎn)。

    2、所謂的過(guò)濾器(Filters),MVC框架里面的過(guò)濾器完全不同于ASP.NET平臺(tái)里面的Request.Filters和Response.Filter對(duì)象,它們主要是實(shí)現(xiàn)請(qǐng)求和響應(yīng)流的傳輸。通常我們所說(shuō)的過(guò)濾器是指MVC框架里面的過(guò)濾器。

    3、過(guò)濾器可以注入一些代碼邏輯到請(qǐng)求處理管道中,是基于C#的Attribute的實(shí)現(xiàn)。當(dāng)負(fù)責(zé)調(diào)用Action的類ControllerActionInvoker在調(diào)用執(zhí)行Action的時(shí)候會(huì)檢查Action上面的Attribute并查看這些Attribute是否實(shí)現(xiàn)了指定的接口,以便進(jìn)行額外的代碼注入處理

     1.2、理解為什么要使用過(guò)濾器

    假設(shè)你做了一個(gè)小項(xiàng)目,其中某個(gè)功能是操作管理用戶信息模塊,有這樣一個(gè)需求,對(duì)用戶信息管理必須是已通過(guò)認(rèn)證的用戶才能操作,我們可以在每一個(gè)Action方法里面檢查認(rèn)證請(qǐng)求,如下所示:

    using MvcFilterDmo.Core;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Security;
    
    namespace MvcFilterDmo.Controllers
    {
     public class HomeController : Controller
     {
     public ActionResult Index()
     {
     if (!Request.IsAuthenticated)
     {
     FormsAuthentication.RedirectToLoginPage();
     }
     //操作部分...
     return View();
     }
     public ActionResult Insert()
     {
     if (!Request.IsAuthenticated)
     {
     FormsAuthentication.RedirectToLoginPage();
     }
     //操作部分...
     return View();
     }
     public ActionResult Update()
     {
     if (!Request.IsAuthenticated)
     {
     FormsAuthentication.RedirectToLoginPage();
     }
     //操作部分...
     return View();
     }
     public ActionResult Delete()
     {
     if (!Request.IsAuthenticated)
     {
     FormsAuthentication.RedirectToLoginPage();
     }
     //操作部分...
     return View();
     }
     //其他Action操作方法
     //...
     }
    }
    
    

    通過(guò)上面的代碼,可以發(fā)現(xiàn)使用這種方式檢查請(qǐng)求認(rèn)證有許多重復(fù)的地方,這也就是為什么要使用過(guò)濾器的原因,使用過(guò)濾器可以實(shí)現(xiàn)相同的效果。如下所示:

    using MvcFilterDmo.Core;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Security;
    
    namespace MvcFilterDmo.Controllers
    {
     [Authorize]
     public class HomeController : Controller
     {
     public ActionResult Index()
     {
     //操作部分...
     return View();
     }
     public ActionResult Insert()
     {
     //操作部分...
     return View();
     }
     public ActionResult Edit()
     { 
     //操作部分...
     return View();
     }
     public ActionResult Delete()
     {
     //操作部分...
     return View();
     }
     //其他Action操作方法
     //...
     }
    }
    
    

    過(guò)濾器是.NET里面的特性(Attributes),它提供了添加到請(qǐng)求處理管道的額外方法。這里使用Authorize過(guò)濾器可以實(shí)現(xiàn)同樣的效果,不過(guò)代碼就顯然比之前更加簡(jiǎn)潔優(yōu)雅。

     二、過(guò)濾器的使用

    2.1、基本類型的過(guò)濾器

    過(guò)濾器實(shí)現(xiàn)的機(jī)制:在MVC框架調(diào)用一個(gè)Action之前,它會(huì)檢查方法的定義中是否實(shí)現(xiàn)了特性(Attributes),如果實(shí)現(xiàn)的話,那么在請(qǐng)求處理管道適當(dāng)?shù)奈恢茫撎匦远x的方法會(huì)被調(diào)用。

    ActionFilterAttribute類既實(shí)現(xiàn)了IactionFilter接口,也實(shí)現(xiàn)IResultFilter接口。這是一個(gè)抽象類,它要求你必須提供一個(gè)實(shí)現(xiàn)。AuthorizeAttribute和HandleErrorAttribute類,則包含了一些有用的特性,并且可以不必創(chuàng)建派生類進(jìn)行使用。

     2.2、過(guò)濾器的應(yīng)用、應(yīng)用方式以及執(zhí)行順序

    應(yīng)用: 過(guò)濾器可以被應(yīng)用到控制器上也可以用到Action方法上,應(yīng)用到控制上時(shí),表示所有的Action方法都有了這個(gè)過(guò)濾器,并且可以混合使用,或多次使用,如下所示:

    [A] //表示所有的Action方法都會(huì)應(yīng)用A過(guò)濾器
    Public class DemoController:Controller
    {
     [B]//B,C過(guò)濾器只作用于此Action方法,但它也會(huì)有A過(guò)濾器的應(yīng)用效果
     [C]
     Public ActionResult Index()
     {
     //操作部分...
     return View();
     } 
    }
    

    應(yīng)用方式:特性的方式,如上面代碼所示。

    執(zhí)行順序:相同類型過(guò)濾器,執(zhí)行順序靠近方法的先執(zhí)行,不同類型的過(guò)濾器一般執(zhí)行順序?yàn)椤綼uthorize--->action--->actionResult】至于異常過(guò)濾器不分先后,只要拋出異常時(shí)就會(huì)執(zhí)行異常過(guò)濾器。如果要調(diào)整執(zhí)行順序,可以通過(guò)調(diào)整Order方法值大小來(lái)控制執(zhí)行順序,值越小,越先執(zhí)行。下圖是Action/Result過(guò)濾器應(yīng)用的執(zhí)行順序圖

    (1)、相同類型過(guò)濾器應(yīng)用示例:兩個(gè)自定義Action過(guò)濾器MyFirstFilter,MyThreeFilter應(yīng)用到同一個(gè)Action方法Index上。

    Three控制器代碼如下:

    MyFirstFilter 代碼如下:

    MyThreeFilter代碼如下:

    運(yùn)行結(jié)果如下:

     

    (2)、不同類型過(guò)濾器應(yīng)用示例:有一個(gè)自定義Action過(guò)濾器MyFirstFilter,有一個(gè)自定義Result過(guò)濾器MySecondFilter,應(yīng)用到同一個(gè)Action方法Index上。

    Three控制器代碼如下:

    MyFirstFilter 代碼如下:

    MySecondFilter代碼如下:

    運(yùn)行結(jié)果如下:

    看完上面的解釋,可能你現(xiàn)在對(duì)這些過(guò)濾器的執(zhí)行順序,以及如何自定義過(guò)濾器還不明白,不要緊,下面我們會(huì)逐一介紹這幾個(gè)基本的過(guò)濾器的使用,以及如何自定義過(guò)濾器。

     2.3、使用授權(quán)過(guò)濾器

    所有實(shí)現(xiàn)了IAuthorizationFilter接口的都可以稱之為授權(quán)過(guò)濾器:其定義如下:

     public interface IAuthorizationFilter
     {
     void OnAuthorization(AuthorizationContext filterContext);
     }

    由于MVC框架系統(tǒng)自帶的AuthorizeAttribute實(shí)現(xiàn)有一些突出的功能,而這種牽涉到安全的代碼一定要謹(jǐn)慎的編寫(xiě),所以一般我們不會(huì)直接實(shí)現(xiàn)這個(gè)接口,而是去繼承AuthorizeAttribute這個(gè)類,并重寫(xiě)其AuthorizeCore方法,簽名為: bool AuthorizeCore(HttpContextBase httpContext) 而處理授權(quán)失敗的時(shí)候,可以重寫(xiě)其HandleUnauthorizedRequest方法,其簽名為: void HandleUnauthorizedRequest(AuthorizationContext context) 。注意:驗(yàn)證與授權(quán)是兩回事,驗(yàn)證發(fā)生在授權(quán)之前。

    默認(rèn)的授權(quán)過(guò)濾器已經(jīng)有了驗(yàn)證的功能,其驗(yàn)證的機(jī)理是利用Asp.net平臺(tái)自帶的驗(yàn)證機(jī)制,如表單驗(yàn)證和Windows驗(yàn)證。除了驗(yàn)證功能,它本身還有授權(quán)的功能。授權(quán)過(guò)濾器是所有過(guò)濾器中最早運(yùn)行的。

    經(jīng)過(guò)Route到達(dá)了控制器的時(shí)候,在調(diào)用Action之前,MVC框架會(huì)檢測(cè)在相關(guān)的Action上是否有授權(quán)過(guò)濾器,如果有會(huì)調(diào)用OnAuthorization方法,如果此方法批準(zhǔn)了請(qǐng)求,才會(huì)調(diào)用相應(yīng)的Action。

    使用授權(quán)過(guò)濾器幾種情況如下:

    1.直接在Action上或者控制器上加Authorize,表示啟用了驗(yàn)證,但不牽涉到授權(quán)。

    2.添加Authorize(Users=“a,b”)],表示啟用了驗(yàn)證,并且也啟用了授權(quán),只有a或者b用戶能訪問(wèn)此控制器。

    3.當(dāng)添加Authorize(Roles=“admin,Member”)]時(shí)的步驟如下:

    ---利用asp.net自帶的角色提供者,或者實(shí)現(xiàn)自己的角色提供者,實(shí)現(xiàn)自己的角色提供者時(shí),只需要集成RoleProvider類型,并實(shí)現(xiàn)其中的所有方法或部分方法,最好實(shí)現(xiàn)所有方法。

    ---在Web程序的根目錄的Web.config文件中配置角色管理者。

    ---在適當(dāng)?shù)腁ction中利用Roles類型來(lái)訪問(wèn)自己創(chuàng)建的RoleProvider中的相關(guān)方法。

    使用內(nèi)置的授權(quán)過(guò)濾器

    MVC框架內(nèi)置的授權(quán)過(guò)濾器AuthorizeAttribute,它允許我們使用這個(gè)類的兩個(gè)公共屬性來(lái)指定授權(quán)策略,如下所示:

     Users和Roles兩者是并且的關(guān)系,例如Users=“a,b,c”,Roles=“admin”,表示用戶是a,b,c 其中一個(gè)并且是Admin角色才能訪問(wèn)。

    創(chuàng)建自定義的授權(quán)過(guò)濾器

    方式一:直接實(shí)現(xiàn)IAuthorizationFilter接口,但不推薦這樣做,因?yàn)闋可娴桨踩矫娴拇a。

    方式二:繼承AuthorizeAttribute這個(gè)類,并重寫(xiě)其AuthorizeCore方法,簽名為: bool AuthorizeCore(HttpContextBase httpContext),代碼如下所示:

    public class MyAuthorizeAttribute : AuthorizeAttribute
     {
     private string[] allowedUsers;
     public MyAuthorizeAttribute(params string[] users)
     {
     allowedUsers = new string[] { "admin", "user1", "xf" };
     }
    
     protected override bool AuthorizeCore(HttpContextBase httpContext)
     {
     return httpContext.Request.IsAuthenticated &&allowedUsers.Contains(httpContext.User.Identity.Name, 
     StringComparer.InvariantCultureIgnoreCase);
     }
     }
    
    

    2.4、使用動(dòng)作過(guò)濾器

     動(dòng)作過(guò)濾器是可以以用于任何目的的多用途過(guò)濾器,創(chuàng)建自定義動(dòng)作過(guò)濾器需要實(shí)現(xiàn)IActionFilter接口,該接口代碼如下所示:

    該接口定義了兩個(gè)方法,MVC框架在調(diào)用動(dòng)作方法之前,會(huì)調(diào)用OnActionExecting方法。在調(diào)用動(dòng)作方法之后,則會(huì)調(diào)用OnActionExecuted方法。

    實(shí)現(xiàn)OnActionExecting方法

    參數(shù)ActionExecutingContext對(duì)象繼承于ControllerContext,其中的2個(gè)屬性:

    ActionDescriptor:提供了關(guān)于Action方法的相關(guān)信息

    Result:類型為ActionResult,通過(guò)給這個(gè)屬性設(shè)置一個(gè)非null的值就可以取消這個(gè)請(qǐng)求。

    我們可以用過(guò)濾器來(lái)取消一個(gè)請(qǐng)求,通過(guò)設(shè)置Result屬性即可。代碼如下所示:

    public class MyActionFilterAttribute : FilterAttribute, IActionFilter
     {
     public void OnActionExecuting(ActionExecutingContext filterContext)
     {
     if(filterContext.HttpContext.Request.IsLocal)
     {
     filterContext.Result = new HttpNotFoundResult();
     }
     }
     public void OnActionExecuted(ActionExecutedContext filterContext)
     {
     //未做實(shí)現(xiàn)
     }
     }

    這個(gè)例子通過(guò)用OnActionExecuting方法檢查請(qǐng)求是否來(lái)自本地機(jī)器,如果是,編隊(duì)用戶返回一個(gè)“404”未找到的響應(yīng)。運(yùn)行結(jié)果如下圖:

     

    實(shí)現(xiàn)OnActionExecuted方法

    我們也可以通過(guò)OnActionExecuted方法來(lái)執(zhí)行一些跨越動(dòng)作方法的任務(wù),下面這個(gè)例子是計(jì)算動(dòng)作方法運(yùn)行的時(shí)間,代碼如下:

    public class MyActionFilterAttribute : FilterAttribute, IActionFilter
     {
     private Stopwatch timer;
     public void OnActionExecuting(ActionExecutingContext filterContext)
     {
     timer = Stopwatch.StartNew();
     }
     public void OnActionExecuted(ActionExecutedContext filterContext)
     {
     timer.Stop();
     if (filterContext.Exception == null)
     {
     filterContext.HttpContext.Response.Write(
     string.Format("動(dòng)作方法延遲的時(shí)間: {0}",
     timer.Elapsed.TotalSeconds));
     }
     }
     }
    }

    我們將自定義的動(dòng)作過(guò)濾器MyActionFilter應(yīng)用到HomeController的Index方法上,運(yùn)行結(jié)果如下:

     2.5、使用結(jié)果過(guò)濾器

    結(jié)果過(guò)濾器是多用途的過(guò)濾器,他會(huì)對(duì)動(dòng)作方法所產(chǎn)生結(jié)果進(jìn)行操作,結(jié)果過(guò)濾器實(shí)現(xiàn)IResultFilter接口,創(chuàng)建自定義結(jié)果過(guò)濾器需要現(xiàn)IResultFilter接口,該接口代碼如下所示:

    當(dāng)結(jié)果過(guò)濾器運(yùn)用于一個(gè)動(dòng)作方法時(shí),會(huì)在動(dòng)作方法返回動(dòng)作結(jié)果之前,調(diào)用OnResultExecuting方法,在返回動(dòng)作結(jié)果之后,會(huì)調(diào)用OnResultExecuted方法。下面這個(gè)例子是計(jì)算動(dòng)作方法返回結(jié)果運(yùn)行的時(shí)間,代碼如下:

    public class MyResultFilterAttribute : FilterAttribute, IResultFilter
     {
     private Stopwatch timer;
     public void OnResultExecuting(ResultExecutingContext filterContext)
     {
     timer = Stopwatch.StartNew();
     }
     public void OnResultExecuted(ResultExecutedContext filterContext)
     {
     timer.Stop();
     filterContext.HttpContext.Response.Write(string.Format("結(jié)果執(zhí)行延遲時(shí)間: {0}", timer.Elapsed.TotalSeconds));
     }
    }

    我們將自定義的結(jié)果過(guò)濾器MyResultFilter應(yīng)用到HomeController的Index方法上,運(yùn)行結(jié)果如下:

     

    需要注意的是:動(dòng)作過(guò)濾器是運(yùn)行在頁(yè)面輸出之前,結(jié)果過(guò)濾器是運(yùn)行在頁(yè)面輸出之后。

     2.6、使用異常過(guò)濾器

    異常過(guò)濾器只有在調(diào)用一個(gè)動(dòng)作方法而拋出未處理的異常才會(huì)運(yùn)行,這種異常來(lái)自以下位置:

    A、另一種過(guò)濾器(授權(quán)、動(dòng)作、或結(jié)果過(guò)濾器)。

    B、動(dòng)作方法本身。

    C、當(dāng)動(dòng)作結(jié)果被執(zhí)行時(shí)。

    使用內(nèi)置的異常過(guò)濾器

    HandleErrorAttribute(處理程序錯(cuò)誤特性),它是MVC內(nèi)嵌的異常過(guò)濾器,有以下3個(gè)重要的屬性:

    1.ExceptionType:類型為T(mén)ype,表示希望被此過(guò)濾器處理的異常類型,包括其子類型,默認(rèn)值為System.Exception

    2.View:類型為string,表示此過(guò)濾器呈遞的視圖頁(yè)面,默認(rèn)值為Error

    3.Master:呈遞的視圖頁(yè)的母板頁(yè),如果不指定,視圖會(huì)用其默認(rèn)的母版頁(yè)

    內(nèi)嵌的HandleErrorException只有在配置文件Web.config中配置的CustomError 的mode設(shè)置為on的時(shí)候才生效(其默認(rèn)模式為RemoteOnly),如下圖所示:

     

    此過(guò)濾器還會(huì)給視圖傳遞一個(gè)HandleErrorInfo類型的對(duì)象給視圖,以便視圖可以顯示一些額外的關(guān)于錯(cuò)誤的信息。下面是使用異常過(guò)濾器的示例。

    應(yīng)用到Index動(dòng)作方法上:

     

    在Views/Shared文件夾下添加一個(gè)顯示異常信息的視圖頁(yè)SpecialError.cshtml,頁(yè)面代碼如下:

    @model HandleErrorInfo
     <!DOCTYPE html>
     <html>
     <head>
     <meta name="viewport" content="width=device-width" />
     <title>SpecialError</title>
     </head>
     <body>
     <div>
     <p>
     There was a<b>@Model.Exception.GetType().Name</b>
     while rendering<b>@Model.ControllerName</b>'s
     <b>@Model.ActionName</b> action
     </p>
     </div>
     </body>
    </html>

    運(yùn)行結(jié)果如下:

     

    創(chuàng)建自定義的異常過(guò)濾器

    如果我們對(duì)異常過(guò)濾器有特殊的需求,可以通過(guò)自定義的異常過(guò)濾器來(lái)完成,創(chuàng)建自定義異常過(guò)濾器必須實(shí)現(xiàn)IExceptionFilter接口,該接口代碼如下:

     

    當(dāng)一個(gè)未知處理異常發(fā)生時(shí),OnException方法會(huì)被調(diào)用。該方法的傳遞一個(gè)ExceptionContext對(duì)象,派生于ControllerContext類,定義了一些額外的過(guò)濾器專有屬性如下表所示:

    拋出的異常通過(guò)Exception屬性是可以訪問(wèn)的。通過(guò)把ExceptionHandled屬性設(shè)置為true,一個(gè)異常過(guò)濾器可以報(bào)告它已經(jīng)處理了該異常,應(yīng)用于一個(gè)動(dòng)作的所有異常過(guò)濾器都會(huì)被調(diào)用。

    需要注意的是:如果一個(gè)動(dòng)作方法的所有異常過(guò)濾器均為把ExceptionHandled屬性設(shè)置為true,MVC框架將使用默認(rèn)的ASP.NET異常處理程序。

    Result屬性有異常過(guò)濾器使用,以告訴MVC框架要做什么,異常過(guò)濾器的兩個(gè)主要應(yīng)用是記錄該異常到日志,并把適當(dāng)?shù)南@示給用戶。下面的代碼將演示通過(guò)創(chuàng)建一個(gè)自定義的異常過(guò)濾器,當(dāng)一個(gè)特定的鐘類的未處理異常出現(xiàn)時(shí),把該用戶重定向到一個(gè)指定的錯(cuò)誤頁(yè)面。

    public class MyExectionAttribute:FilterAttribute,IExceptionFilter
     {
     public void OnException(ExceptionContext filterContext)
     {
     if(!filterContext.ExceptionHandled&&
     filterContext.Exception is NullReferenceException)
     {
     filterContext.Result = new RedirectResult("~/Content/SpecialErrorPage.html");
     filterContext.ExceptionHandled = true;
     }
     }
    }
    

    然后在項(xiàng)目根目錄添加一個(gè)名為Content的文件夾,在該文件夾下創(chuàng)建SpeciErrorPage.html文件,當(dāng)異常被處理時(shí),將以這個(gè)錯(cuò)誤頁(yè)面顯示個(gè)用戶。該頁(yè)面代碼如下:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <title></title>
    </head>
    <body>
     <h1>Sorry</h1>
     <p>this is a Excetption test</p>
     There was aNullReferenceException while renderingHome's Index action 
    </body>
    </html>

    在控制器中應(yīng)用MyExection異常過(guò)濾器,并主動(dòng)讓其拋出一個(gè)空引用異常,以便測(cè)試。

    public class HomeController : Controller
     {
     [MyExection]
     public ActionResult Index()
     {
     throw new NullReferenceException();
     }
     }

    運(yùn)行結(jié)果如下:

     

    總結(jié):本文章簡(jiǎn)單總結(jié)了對(duì)過(guò)濾器的理解以及如何使用MVC框架內(nèi)置基本的過(guò)濾器和如何自定義過(guò)濾器及應(yīng)用。

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Asp.Net MVC學(xué)習(xí)總結(jié)之過(guò)濾器詳解

    Asp.Net MVC學(xué)習(xí)總結(jié)之過(guò)濾器詳解: 一、過(guò)濾器簡(jiǎn)介 1.1、理解什么是過(guò)濾器 1、過(guò)濾器(Filters)就是向請(qǐng)求處理管道中注入額外的邏輯。提供了一個(gè)簡(jiǎn)單而優(yōu)雅的方式來(lái)實(shí)現(xiàn)橫切關(guān)注點(diǎn)。 2、所謂的過(guò)濾器(Filters),MVC框架里面的過(guò)濾器完全不同于ASP.NET平臺(tái)里面的Request.Filte
    推薦度:
    標(biāo)簽: 學(xué)習(xí) 詳解 解析
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品美女久久久m| 99精品视频在线观看婷| 秋霞久久国产精品电影院| A级精品国产片在线观看| 久久国产精品77777| 国精品午夜福利视频不卡| 久久精品国产亚洲AV无码麻豆 | 9999国产精品欧美久久久久久| 亚洲精品视频在线观看你懂的| 中文字幕精品一区二区三区视频| 亚洲一级Av无码毛片久久精品| 精品亚洲欧美高清不卡高清| 亚洲精品高清视频| 国产精品亚洲w码日韩中文| 久久精品成人一区二区三区| 97久久久精品综合88久久| 青春草无码精品视频在线观| 亚洲国产一成人久久精品| 精品人妻va出轨中文字幕| 久热精品人妻视频| 99久久精品国产综合一区| 久久青青草原精品国产软件| 国产精品内射后入合集| 亚洲国产精品成人AV无码久久综合影院| 亚洲精品福利视频| 亚洲精品国产精品国自产观看| 国产精品亚洲二区在线观看 | 国产农村妇女毛片精品久久| 国产精品免费高清在线观看| 网友偷拍日韩精品| 精品多毛少妇人妻AV免费久久| 国产精品成熟老女人视频| 四虎精品成人免费视频| 国产精品麻豆入口| 久久99热国产这有精品| 麻豆亚洲AV永久无码精品久久| 99国产精品无码| 中文精品无码中文字幕无码专区| 国产午夜精品理论片| 欧美精品一本久久男人的天堂| 久久精品国产亚洲AV大全|