精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ASP.NET MVC5教學之過濾器(下)

jf_78858299 ? 來源:python技術探秘一品文學閣 ? 作者:一品文學閣 ? 2023-03-29 11:20 ? 次閱讀

OnActionExecuted方法在Action操作方法調用之后執行,傳遞給OnActionExecuted方法的參數是ActionExecutedContext對象。這個類比ActionExecutingContext對象多了些屬性,如下:

名稱 類型 說明
ActionDescriptor ActionDescriptor 獲取或設置操作描述符。
Canceled bool 獲取或設置一個值,該值指示此ActionExecutedContext 對象已被取消。
Exception Exception 獲取或設置在操作方法的執行過程中發生的異常(如果有)。
ExceptionHandled bool 獲取或設置一個值,該值指示是否處理異常。
Result ActionResult 獲取或設置由操作方法返回的結果。

我們可以通過OnActionExecuted方法來執行一些跨越動作方法的任務,比如我們可以用它來獲取動作方法執行的時間。我們修改 MyActionAttribute 過濾器代碼如下:

public class MyActionAttribute : ActionFilterAttribute
{
    private Stopwatch timer;


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

我們在方法啟動之前啟動了一個計時器,在方法執行后停止了它,并且將這個時間間隔輸出到我們的頁面上。重新編譯打開Index頁面,顯示如下:

圖片

結果過濾器

結果過濾器,顧名思義針對的是動作方法返回的結果,它在我們的動作方法結果返回前后執行。

創建結果過濾器需要實現IResultFilter接口。ActionFilterAttribute類幫我們實現了IResultFilter接口,我們可以直接繼承ActionFilterAttribute創建我們的過濾器,然后通過重寫OnResultExecutin和OnResultExecuting(在執行操作結果后調用)方法來實現過濾器規則。

OnResultExecuting方法會在執行操作結果前調用,這個方法的參數是一個ResultExecutingContext對象,屬性如下:

名稱 類型 說明
Cancel bool 獲取或設置一個值,該值指示此 ResultExecutingContext 值是否為“cancel”。
Result ActionResult 獲取或設置操作結果。

OnResultExecuted方法在執行操作結果后調用,這個方法的參數是一個ResultExecutingContext對象,屬性如下:

名稱 類型 說明
Canceled bool 獲取或設置一個值,該值指示此 ResultExecutingContext 值是否為“cancel”。
Exception Exception 獲取或設置在操作方法的執行過程中發生的異常(如果有)。
ExceptionHandled bool 獲取或設置一個值,該值指示是否處理異常。
Result ActionResult 獲取或設置操作結果。

我們可以使用這兩個方法在Action方法返回結果前后進行操作,具體操作的代碼我就不贅述了。

異常處理過濾器

異常處理過濾器需要實現的接口為IExceptionFilter。我們看下接口的定義:

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

接口方法OnException可以看到它在我們的方法中出現異常時觸發,MVC默認用HandleErrorAttribute類來實現了此接口,我們自己定義的異常過濾器可以繼承此類進行擴展。

OnException方法中傳遞的參數是一個ExceptionContext對象,它的屬性如下:

名稱 類型 說明
Exception Exception 獲取或設置異常對象。
ExceptionHandled bool 獲取或設置一個值,該值指示是否已處理異常。
Result ActionResult 獲取或設置操作結果。

我們來定義一個異常過濾器,代碼如下:

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

當我們的方法中出現異常時,會將Views文件夾下Shared中的Error.cshtml頁面返回到客戶端,客戶端頁面不再顯示成黃頁,給用戶一個良好的體驗。

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

圖片

打開Index視圖:

圖片

視圖中顯示的是Error頁面中的內容。

通常我們用異常處理器來記錄我們的程序異常日志,或者在產生異常時給客戶端返回一個友好的提示內容。

過濾器的使用方法

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

應用在Controller中的使用方法和Action一致,在Controller類名上方添加特性標簽即可。如圖:

圖片

全局環境下的過濾器,則需要注冊到FilterConfig文件中,例如MVC默認給我們注冊的HandleErrorAttribute異常處理器:

圖片

并且我們可以注冊很多個過濾器在全局環境下,那么在此注冊的過濾器會應用到整個應用程序當中。

總結

本章對過濾器的類型,作用,定義以及使用方法做了一些說明,當然這些都是比較基礎的內容,真正深入的理解還得多多使用,如果文章中有錯誤或者不足的地方,請大家在評論中指正出來。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16214

    瀏覽量

    177481
  • Asp.net
    +關注

    關注

    0

    文章

    36

    瀏覽量

    13846
  • 過濾器
    +關注

    關注

    1

    文章

    427

    瀏覽量

    19563
  • MVC
    MVC
    +關注

    關注

    0

    文章

    73

    瀏覽量

    13841
收藏 人收藏

    評論

    相關推薦

    ASP.net Ajax開發.zip

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

    ASP.net Ajax開發》初識ASP.NET AJAX.pdf

    ASP.net Ajax開發》初識ASP.NET AJAX.pdf[hide][/hide]
    發表于 06-22 21:20

    北大青鳥asp.net教程

    北大青鳥asp.net教程.ASP.NET 和 Web 窗體 理解Web窗體和在B/S結構中IIS的工作原理在ASP.NET應用程序中使用可視化組件和  ASP.NET內部對
    發表于 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
    發表于 10-21 09:23 ?59次下載
    Programming Microsoft <b class='flag-5'>ASP.NET</b>

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

    Asp.net中文手冊:第一篇 概論第一章 微軟.NET戰略和ASP.NET簡介第二章 .NET的安裝與運行環境第二篇 Web Form第一章 Web Form簡介(上)第一章 Web
    發表于 12-06 13:49 ?212次下載

    ASP.NET課程設計案例精編

    ASP.NET課程設計案例精編是一本全面講解ASP.NET編程方法和技巧的書,從ASP.NET的基本知識點入手,以ASP.NET網絡應用為主,詳細講述了大量的編程實例。這些實例基
    發表于 01-07 16:14 ?144次下載
    <b class='flag-5'>ASP.NET</b>課程設計案例精編

    Asp.net MVC框架自定義視圖引擎的實現

    針對當前Web 應用系統層次不夠分明、結構不夠清晰等不足,結合MVC 設計模式,實現了基于Asp.net MVC 框架的自定義視圖引擎,在顯示層將顯示邏輯與應用邏輯相分離,將數據訪問
    發表于 01-15 14:13 ?36次下載

    ASP.NET 2.0網絡開發技術》 ASP.NET 2.0核

    ASP.NET 2.0網絡開發技術》 ASP.NET 2.0核心對象
    發表于 02-07 15:05 ?0次下載

    ASP.NET 2.0網絡開發技術》 走進ASP.NET 2.

    ASP.NET 2.0網絡開發技術》 走進ASP.NET 2.0
    發表于 02-07 15:11 ?0次下載

    ASP.net Ajax開發》初識ASP.NET AJAX

    ASP.net Ajax開發》初識ASP.NET AJAX
    發表于 02-07 15:11 ?0次下載

    ASP.net Ajax開發

    ASP.net Ajax開發
    發表于 02-16 00:10 ?0次下載

    過濾器的作用

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

    過濾器藥液過濾器濾除率測試儀

    過濾器藥液過濾器濾除率測試儀
    的頭像 發表于 03-09 14:53 ?835次閱讀
    <b class='flag-5'>過濾器</b>藥液<b class='flag-5'>過濾器</b>濾除率測試儀

    ASP.NET MVC5教學之過濾器(上)

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

    殺菌過濾器 滅菌過濾器 除菌過濾器

    殺菌過濾器 滅菌過濾器 除菌過濾器
    的頭像 發表于 03-03 14:03 ?2596次閱讀
    殺菌<b class='flag-5'>過濾器</b> 滅菌<b class='flag-5'>過濾器</b> 除菌<b class='flag-5'>過濾器</b>