99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ASP.NET MVC5教學(xué)之過(guò)濾器(下)

jf_78858299 ? 來(lái)源:python技術(shù)探秘一品文學(xué)閣 ? 作者:一品文學(xué)閣 ? 2023-03-29 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

OnActionExecuted方法在Action操作方法調(diào)用之后執(zhí)行,傳遞給OnActionExecuted方法的參數(shù)是ActionExecutedContext對(duì)象。這個(gè)類(lèi)比ActionExecutingContext對(duì)象多了些屬性,如下:

名稱(chēng) 類(lèi)型 說(shuō)明
ActionDescriptor ActionDescriptor 獲取或設(shè)置操作描述符。
Canceled bool 獲取或設(shè)置一個(gè)值,該值指示此ActionExecutedContext 對(duì)象已被取消。
Exception Exception 獲取或設(shè)置在操作方法的執(zhí)行過(guò)程中發(fā)生的異常(如果有)。
ExceptionHandled bool 獲取或設(shè)置一個(gè)值,該值指示是否處理異常。
Result ActionResult 獲取或設(shè)置由操作方法返回的結(jié)果。

我們可以通過(guò)OnActionExecuted方法來(lái)執(zhí)行一些跨越動(dòng)作方法的任務(wù),比如我們可以用它來(lái)獲取動(dòng)作方法執(zhí)行的時(shí)間。我們修改 MyActionAttribute 過(guò)濾器代碼如下:

public class MyActionAttribute : ActionFilterAttribute
{
    private Stopwatch timer;


    /// 
    /// Action調(diào)用之前運(yùn)行
    /// 
    /// 
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        timer = Stopwatch.StartNew();
    }
    /// 
    /// Action調(diào)用之后運(yùn)行
    /// 
    /// 
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        timer.Stop();
        filterContext.HttpContext.Response.Write($"方法執(zhí)行時(shí)間:{timer.Elapsed.TotalSeconds:F6}s");
    }
}

我們?cè)诜椒▎?dòng)之前啟動(dòng)了一個(gè)計(jì)時(shí)器,在方法執(zhí)行后停止了它,并且將這個(gè)時(shí)間間隔輸出到我們的頁(yè)面上。重新編譯打開(kāi)Index頁(yè)面,顯示如下:

圖片

結(jié)果過(guò)濾器

結(jié)果過(guò)濾器,顧名思義針對(duì)的是動(dòng)作方法返回的結(jié)果,它在我們的動(dòng)作方法結(jié)果返回前后執(zhí)行。

創(chuàng)建結(jié)果過(guò)濾器需要實(shí)現(xiàn)IResultFilter接口。ActionFilterAttribute類(lèi)幫我們實(shí)現(xiàn)了IResultFilter接口,我們可以直接繼承ActionFilterAttribute創(chuàng)建我們的過(guò)濾器,然后通過(guò)重寫(xiě)OnResultExecutin和OnResultExecuting(在執(zhí)行操作結(jié)果后調(diào)用)方法來(lái)實(shí)現(xiàn)過(guò)濾器規(guī)則。

OnResultExecuting方法會(huì)在執(zhí)行操作結(jié)果前調(diào)用,這個(gè)方法的參數(shù)是一個(gè)ResultExecutingContext對(duì)象,屬性如下:

名稱(chēng) 類(lèi)型 說(shuō)明
Cancel bool 獲取或設(shè)置一個(gè)值,該值指示此 ResultExecutingContext 值是否為“cancel”。
Result ActionResult 獲取或設(shè)置操作結(jié)果。

OnResultExecuted方法在執(zhí)行操作結(jié)果后調(diào)用,這個(gè)方法的參數(shù)是一個(gè)ResultExecutingContext對(duì)象,屬性如下:

名稱(chēng) 類(lèi)型 說(shuō)明
Canceled bool 獲取或設(shè)置一個(gè)值,該值指示此 ResultExecutingContext 值是否為“cancel”。
Exception Exception 獲取或設(shè)置在操作方法的執(zhí)行過(guò)程中發(fā)生的異常(如果有)。
ExceptionHandled bool 獲取或設(shè)置一個(gè)值,該值指示是否處理異常。
Result ActionResult 獲取或設(shè)置操作結(jié)果。

我們可以使用這兩個(gè)方法在Action方法返回結(jié)果前后進(jìn)行操作,具體操作的代碼我就不贅述了。

異常處理過(guò)濾器

異常處理過(guò)濾器需要實(shí)現(xiàn)的接口為IExceptionFilter。我們看下接口的定義:

//
// 摘要:
//     定義異常篩選器所需的方法。
public interface IExceptionFilter
{
    //
    // 摘要:
    //     在發(fā)生異常時(shí)調(diào)用。
    //
    // 參數(shù):
    //   filterContext:
    //     篩選器上下文。
    void OnException(ExceptionContext filterContext);
}

接口方法OnException可以看到它在我們的方法中出現(xiàn)異常時(shí)觸發(fā),MVC默認(rèn)用HandleErrorAttribute類(lèi)來(lái)實(shí)現(xiàn)了此接口,我們自己定義的異常過(guò)濾器可以繼承此類(lèi)進(jìn)行擴(kuò)展。

OnException方法中傳遞的參數(shù)是一個(gè)ExceptionContext對(duì)象,它的屬性如下:

名稱(chēng) 類(lèi)型 說(shuō)明
Exception Exception 獲取或設(shè)置異常對(duì)象。
ExceptionHandled bool 獲取或設(shè)置一個(gè)值,該值指示是否已處理異常。
Result ActionResult 獲取或設(shè)置操作結(jié)果。

我們來(lái)定義一個(gè)異常過(guò)濾器,代碼如下:

public class MyExceptionAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        //如果有異常,跳轉(zhuǎn)到異常頁(yè)面。
        if (filterContext.Exception != null)
        {
            //跳轉(zhuǎn)到自定義的錯(cuò)誤頁(yè)
            ActionResult view = new ViewResult() { ViewName = "Error" };
            filterContext.Result = view;
            //異常處理結(jié)束后,一定要將ExceptionHandled設(shè)置為true,否則仍然會(huì)繼續(xù)拋出錯(cuò)誤。
            filterContext.ExceptionHandled = true;
        }
    }
}

當(dāng)我們的方法中出現(xiàn)異常時(shí),會(huì)將Views文件夾下Shared中的Error.cshtml頁(yè)面返回到客戶(hù)端,客戶(hù)端頁(yè)面不再顯示成黃頁(yè),給用戶(hù)一個(gè)良好的體驗(yàn)。

我們給Index方法添加上我們的異常處理器,再加一段引發(fā)異常的代碼看下效果。

圖片

打開(kāi)Index視圖:

圖片

視圖中顯示的是Error頁(yè)面中的內(nèi)容。

通常我們用異常處理器來(lái)記錄我們的程序異常日志,或者在產(chǎn)生異常時(shí)給客戶(hù)端返回一個(gè)友好的提示內(nèi)容。

過(guò)濾器的使用方法

在上文的一些例子中,我們把過(guò)濾器的特性都定義在了Action方法上,其實(shí)過(guò)濾器不僅可以應(yīng)用在Action方法中,還可在應(yīng)用在Controller和全局配置中。

應(yīng)用在Controller中的使用方法和Action一致,在Controller類(lèi)名上方添加特性標(biāo)簽即可。如圖:

圖片

全局環(huán)境下的過(guò)濾器,則需要注冊(cè)到FilterConfig文件中,例如MVC默認(rèn)給我們注冊(cè)的HandleErrorAttribute異常處理器:

圖片

并且我們可以注冊(cè)很多個(gè)過(guò)濾器在全局環(huán)境下,那么在此注冊(cè)的過(guò)濾器會(huì)應(yīng)用到整個(gè)應(yīng)用程序當(dāng)中。

總結(jié)

本章對(duì)過(guò)濾器的類(lèi)型,作用,定義以及使用方法做了一些說(shuō)明,當(dāng)然這些都是比較基礎(chǔ)的內(nèi)容,真正深入的理解還得多多使用,如果文章中有錯(cuò)誤或者不足的地方,請(qǐng)大家在評(píng)論中指正出來(lái)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17116

    瀏覽量

    184438
  • Asp.net
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    14091
  • 過(guò)濾器
    +關(guān)注

    關(guān)注

    1

    文章

    439

    瀏覽量

    20404
  • MVC
    MVC
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    14141
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ASP.net Ajax開(kāi)發(fā).zip

    ASP.net Ajax開(kāi)發(fā).zip[hide][/hide]《ASP.net Ajax開(kāi)發(fā)》AJAX Control Toolkit中的文本輸入處理《ASP.net Ajax開(kāi)發(fā)》初識(shí)ASP
    發(fā)表于 06-19 21:26

    ASP.net Ajax開(kāi)發(fā)》初識(shí)ASP.NET AJAX.pdf

    ASP.net Ajax開(kāi)發(fā)》初識(shí)ASP.NET AJAX.pdf[hide][/hide]
    發(fā)表于 06-22 21:20

    北大青鳥(niǎo)asp.net教程

    北大青鳥(niǎo)asp.net教程.ASP.NET 和 Web 窗體 理解Web窗體和在B/S結(jié)構(gòu)中IIS的工作原理在ASP.NET應(yīng)用程序中使用可視化組件和  ASP.NET內(nèi)部對(duì)
    發(fā)表于 07-15 16:21 ?0次下載

    Programming Microsoft ASP.NET

    Programming Microsoft ASP.NET 3.5 ASP.NET pages are dynamically compiled on demand when first
    發(fā)表于 10-21 09:23 ?59次下載
    Programming Microsoft <b class='flag-5'>ASP.NET</b>

    Asp.net中文手冊(cè)(CHM格式)

    Asp.net中文手冊(cè):第一篇 概論第一章 微軟.NET戰(zhàn)略和ASP.NET簡(jiǎn)介第二章 .NET的安裝與運(yùn)行環(huán)境第二篇 Web Form第一章 Web Form簡(jiǎn)介(上)第一章 Web
    發(fā)表于 12-06 13:49 ?212次下載

    ASP.NET課程設(shè)計(jì)案例精編

    ASP.NET課程設(shè)計(jì)案例精編是一本全面講解ASP.NET編程方法和技巧的書(shū),從ASP.NET的基本知識(shí)點(diǎn)入手,以ASP.NET網(wǎng)絡(luò)應(yīng)用為主,詳細(xì)講述了大量的編程實(shí)例。這些實(shí)例基
    發(fā)表于 01-07 16:14 ?150次下載
    <b class='flag-5'>ASP.NET</b>課程設(shè)計(jì)案例精編

    Asp.net MVC框架自定義視圖引擎的實(shí)現(xiàn)

    針對(duì)當(dāng)前Web 應(yīng)用系統(tǒng)層次不夠分明、結(jié)構(gòu)不夠清晰等不足,結(jié)合MVC 設(shè)計(jì)模式,實(shí)現(xiàn)了基于Asp.net MVC 框架的自定義視圖引擎,在顯示層將顯示邏輯與應(yīng)用邏輯相分離,將數(shù)據(jù)訪(fǎng)問(wèn)
    發(fā)表于 01-15 14:13 ?36次下載

    ASP.NET 2.0網(wǎng)絡(luò)開(kāi)發(fā)技術(shù)》 ASP.NET 2.0核

    ASP.NET 2.0網(wǎng)絡(luò)開(kāi)發(fā)技術(shù)》 ASP.NET 2.0核心對(duì)象
    發(fā)表于 02-07 15:05 ?0次下載

    ASP.NET 2.0網(wǎng)絡(luò)開(kāi)發(fā)技術(shù)》 走進(jìn)ASP.NET 2.

    ASP.NET 2.0網(wǎng)絡(luò)開(kāi)發(fā)技術(shù)》 走進(jìn)ASP.NET 2.0
    發(fā)表于 02-07 15:11 ?0次下載

    ASP.net Ajax開(kāi)發(fā)》初識(shí)ASP.NET AJAX

    ASP.net Ajax開(kāi)發(fā)》初識(shí)ASP.NET AJAX
    發(fā)表于 02-07 15:11 ?0次下載

    ASP.net Ajax開(kāi)發(fā)

    ASP.net Ajax開(kāi)發(fā)
    發(fā)表于 02-16 00:10 ?0次下載

    過(guò)濾器的作用

    本視頻主要詳細(xì)介紹了過(guò)濾器的作用,分別是濾速高、過(guò)濾效果好;強(qiáng)度高、耐腐蝕;靜電作用;過(guò)濾物質(zhì);攔截;其次介紹了水龍頭過(guò)濾器的作用,最后介紹了活性炭
    的頭像 發(fā)表于 12-12 16:23 ?4.8w次閱讀

    過(guò)濾器藥液過(guò)濾器濾除率測(cè)試儀

    過(guò)濾器藥液過(guò)濾器濾除率測(cè)試儀
    的頭像 發(fā)表于 03-09 14:53 ?1208次閱讀
    <b class='flag-5'>過(guò)濾器</b>藥液<b class='flag-5'>過(guò)濾器</b>濾除率測(cè)試儀

    ASP.NET MVC5教學(xué)之過(guò)濾器(上)

    MVC中的每一個(gè)請(qǐng)求,都會(huì)分配給相應(yīng)的控制器(Controller)和對(duì)應(yīng)的行為方法(Action)去處理,那么如果我們想要在Action處理的前后加上一些額外的處理邏輯怎么辦呢?這時(shí)候就用到了過(guò)濾器(Filters)。 在ASP
    的頭像 發(fā)表于 03-29 11:20 ?1152次閱讀
    <b class='flag-5'>ASP.NET</b> <b class='flag-5'>MVC5</b><b class='flag-5'>教學(xué)</b><b class='flag-5'>之過(guò)濾器</b>(上)

    殺菌過(guò)濾器 滅菌過(guò)濾器 除菌過(guò)濾器

    殺菌過(guò)濾器 滅菌過(guò)濾器 除菌過(guò)濾器
    的頭像 發(fā)表于 03-03 14:03 ?3168次閱讀
    殺菌<b class='flag-5'>過(guò)濾器</b> 滅菌<b class='flag-5'>過(guò)濾器</b> 除菌<b class='flag-5'>過(guò)濾器</b>