色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

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

什么是過濾器?

MVC中的每一個(gè)請(qǐng)求,都會(huì)分配給相應(yīng)的控制器(Controller)和對(duì)應(yīng)的行為方法(Action)去處理,那么如果我們想要在Action處理的前后加上一些額外的處理邏輯怎么辦呢?這時(shí)候就用到了過濾器(Filters)。

在ASP.NET MVC的請(qǐng)求處理過程中有19個(gè)管道事件,這些事件分布在請(qǐng)求處理的各個(gè)節(jié)點(diǎn)中,比如BeginRequest(開始處理請(qǐng)求時(shí)觸發(fā))、AuthenticateRequest(對(duì)請(qǐng)求進(jìn)行身份驗(yàn)證時(shí)觸發(fā))、AuthorizeRequest(對(duì)請(qǐng)求進(jìn)程授權(quán)時(shí)觸發(fā))…等等等等。而過濾器的主要作用就是將我們的附加邏輯注入到這些請(qǐng)求處理管道中。

在實(shí)際業(yè)務(wù)中,在Action方法前后添加額外附加邏輯的情況有很多,過濾器就是用來完成此功能。通過過濾器可以將與業(yè)務(wù)邏輯無關(guān)但經(jīng)常需要執(zhí)行的代碼分離開,使我們的代碼邏輯性更加清晰,代碼更加簡(jiǎn)潔。

過濾器的類型與作用

MVC給我們提供了四種過濾器,基本滿足了我們實(shí)際業(yè)務(wù)中常用的需求,包括以下:

類型名稱 實(shí)現(xiàn)的接口 默認(rèn)的實(shí)現(xiàn)類 作用
授權(quán)過濾器 IAuthorizationFilter AuthorizeAttribute 用于限制進(jìn)入控制器或控制器的某個(gè)行為方法
動(dòng)作過濾器 IActionFilter ActionFilterAttribute 用于進(jìn)入動(dòng)作方法之前或之后的處理
結(jié)果過濾器 IResultFilter ActionFilterAttribute 用于動(dòng)作方法返回結(jié)果之前或之后的處理
異常處理過濾器 IExceptionFilter HandleErrorAttribute 用于處理某個(gè)動(dòng)作方法或某個(gè)控制器里面拋出的異常

這四種類型的接口是MVC對(duì)過濾器的一個(gè)接口規(guī)范,同時(shí)MVC默認(rèn)通過AuthorizeAttribute(授權(quán))、HandleErrorAttribute(異常處理)、ActionFilterAttribute(動(dòng)作和結(jié)果)三個(gè)類實(shí)現(xiàn)了這四個(gè)接口。

需要注意的是ActionFilterAttribute類既實(shí)現(xiàn)了IActionFilter接口,也實(shí)現(xiàn)了IResultFilter接口。這是個(gè)抽象類,要求必須提供一個(gè)實(shí)現(xiàn),AuthorizeAttribute和HandleErrorAttribute類則包含了一些有用的特性,可以不必創(chuàng)建派生類進(jìn)行使用。所以我們一般都會(huì)通過繼承ActionFilterAttribute類,實(shí)現(xiàn)自定義的過濾器。

除以上接口之外,我們還要用到FilterAttribute類,這個(gè)類將我們的過濾器包裝成了特性,使我們的過濾器可以方便的在Action方法上方使用。

定義過濾器

過濾器有以下幾個(gè)特點(diǎn):

  • 可用于動(dòng)作方法(Action)
  • 可用于控制器(Controller)
  • 可多個(gè)Filter可同時(shí)使用
  • 不同級(jí)別可以混搭
  • 可運(yùn)用于基類的過濾器,會(huì)影響該基類的所有派生類

下面我們逐一介紹下基本過濾器的使用方法。

授權(quán)過濾器

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

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

授權(quán)過濾器是最先運(yùn)行的過濾器,它運(yùn)行在其它過濾器和Action方法之前。客戶端請(qǐng)求在調(diào)用Action之前,MVC框架會(huì)檢測(cè)Action上是否有授權(quán)過濾器,如果有會(huì)調(diào)用OnAuthorization方法,如果此方法批準(zhǔn)了請(qǐng)求,才會(huì)調(diào)用相應(yīng)的Action。流程如圖:

圖片

MVC默認(rèn)使用AuthorizeAttribute實(shí)現(xiàn)了IAuthorizationFilter接口,所以我們可以在Action方法上直接添加Authorize特性標(biāo)簽來驗(yàn)證授權(quán):

圖片

打開Index頁面,會(huì)顯示無權(quán)限:

圖片

由于使用的是MVC自帶的授權(quán)驗(yàn)證方法,未能符合它的驗(yàn)證機(jī)制,所以無權(quán)限查看。通常我們需要添加一個(gè)新的派生自AuthorizeAttribute類的授權(quán)過濾器來完成我們自己業(yè)務(wù)邏輯。

下面我們自定義一個(gè)授權(quán)過濾器。我們?cè)贛VC項(xiàng)目中添加一個(gè)Filters文件夾,我們所有自定義的過濾器都放可以到這個(gè)文件夾下,便于管理。

在Filters下創(chuàng)建一個(gè)類,類名為MyAuthorizeAttribute。需要注意,過濾器要以Attribute結(jié)尾,這是MVC的約定。代碼如下:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    //重寫授權(quán)檢查方法,返回值為true,允許訪問,false,禁止訪問。
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        //請(qǐng)求參數(shù)user為空,禁止訪問
        if (string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["user"]))
        {
            return false;
        }
        return true;
    }
}

可以看到,我們只要重寫AuthorizeCore方法就可以根據(jù)我們的業(yè)務(wù)需求判斷是否有權(quán)限訪問,返回值為true允許訪問,返回值為false禁止訪問。

回到HomeController,我們給About方法加上我們自定義的特性:

圖片

我們看看效果:

圖片

可以看到,當(dāng)About頁面沒有user參數(shù)時(shí),會(huì)提示無權(quán)限,有user參數(shù)則可以訪問通過。

在實(shí)際業(yè)務(wù)中我們可以使用授權(quán)過濾器來管理用戶登錄狀態(tài)的授權(quán)驗(yàn)證。當(dāng)然,我的這個(gè)例子只是基礎(chǔ)的用法,實(shí)際業(yè)務(wù)比這復(fù)雜的多,那么就需要我們自己去思考設(shè)計(jì)授權(quán)過濾器方法了。

動(dòng)作過濾器

動(dòng)作過濾器需要實(shí)現(xiàn)IActionFilter接口,接口定義如下:

//
// 摘要:
//     定義操作篩選器中使用的方法。
public interface IActionFilter
{
    //
        // 摘要:
        //     在執(zhí)行操作方法后調(diào)用。
        //
        // 參數(shù):
        //   filterContext:
        //     篩選器上下文。
        void OnActionExecuted(ActionExecutedContext filterContext);
    //
        // 摘要:
        //     在執(zhí)行操作方法之前調(diào)用。
        //
        // 參數(shù):
        //   filterContext:
        //     篩選器上下文。
        void OnActionExecuting(ActionExecutingContext filterContext);
}

我們看到該接口里有兩個(gè)方法OnActionExecuting和OnActionExecuted,前者在動(dòng)作方法執(zhí)行前調(diào)用,后者在動(dòng)作方法執(zhí)行后調(diào)用。

OnActionExecuting方法是在Action方法執(zhí)行前調(diào)用的,那么我們可以利用這個(gè)方法來檢測(cè)請(qǐng)求,并且可以在這里修改請(qǐng)求,取消請(qǐng)求等等操作。

客戶端的請(qǐng)求信息是一個(gè)ActionExecutingContext對(duì)象,它繼承自ControllerContext類,屬性如下:

名稱 類型 說明
ActionDescriptor ActionDescriptor 獲取或設(shè)置操作描述符。
ActionParameters IDictionary 獲取或設(shè)置操作方法參數(shù)。
Result ActionResult 獲取或設(shè)置由操作方法返回的結(jié)果。

我們添加一個(gè)自定義的Action過濾器。由于ActionFilterAttribute類實(shí)現(xiàn)了IActionFilter接口,所以我們直接繼承ActionFilterAttribute類即可,并且重寫OnActionExecuting和OnActionExecuted方法。如下:

public class MyActionAttribute : ActionFilterAttribute
{
    /// 
    /// Action調(diào)用之前運(yùn)行
    /// 
    /// 
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (string.Equals(filterContext.HttpContext.Request.HttpMethod, "get", StringComparison.CurrentCultureIgnoreCase))
        {
            filterContext.Result = new HttpNotFoundResult("只允許POST請(qǐng)求!");
        }
    }
    /// 
    /// Action調(diào)用之后運(yùn)行
    /// 
    /// 
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {


    }
}

我們給Index方法添加上MyAction特性標(biāo)簽:

圖片

打開Index頁,顯示如下:

圖片

可以看到,頁面返回了404錯(cuò)誤,提示信息為我們?cè)O(shè)置的Message。

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

    關(guān)注

    0

    文章

    397

    瀏覽量

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

    關(guān)注

    0

    文章

    36

    瀏覽量

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

    關(guān)注

    1

    文章

    429

    瀏覽量

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

    關(guān)注

    0

    文章

    73

    瀏覽量

    13865
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    北大青鳥asp.net教程

    北大青鳥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)介(
    發(fā)表于 12-06 13:49 ?212次下載

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

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

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

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

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

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

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

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

    ASP.net Ajax開發(fā)

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

    過濾器的作用

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

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

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

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

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

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

    殺菌過濾器 滅菌過濾器 除菌過濾器
    的頭像 發(fā)表于 03-03 14:03 ?2666次閱讀
    殺菌<b class='flag-5'>過濾器</b> 滅菌<b class='flag-5'>過濾器</b> 除菌<b class='flag-5'>過濾器</b>
    主站蜘蛛池模板: 中文字幕亚洲男人的天堂网络 | 婷婷五月久久精品国产亚洲| 亚洲人成在线播放网站岛国| 国产精品JIZZ视频免费| 情浓野战台湾三级| 97在线超碰免费视频| 久久青草免费91线频观看站街| 亚洲精品乱码一区二区三区| 国产内射AV徐夜夜| 午夜久久影院| 国产精品视频免费视频| 十九岁在线观看免费完整版电影 | 日韩 无码 手机 在线| yellow在线中文| 轻轻cao| 成人无码国产AV免费看| 日本人bbwbbwbbwbbw| 动漫美女被h动态图| 特级aa 毛片免费观看 | 成人在线视频网站| 色婷婷国产精品视频一区二区 | 99视频在线国产| 欧美亚洲色帝国| 高清观看ZSHH96的视频素材| 天美传媒 免费观看| 国产免费69成人精品视频| 亚洲欧美日韩在线观看一区二区三区| 果冻传媒视频在线播放 免费观看| 亚洲精品在线影院| 麻豆啊传媒app黄版破解免费| 91免费网站在线看入口黄| 欧美九十老太另类| 国产精品97久久久久久AV色戒| 午夜精品久久久久久99热蜜桃 | 男女床上黄色| 夫妻性姿势真人做视频| 亚洲mv在线观看| 伦理片飘花手机在线| 啊灬啊灬啊灬快高潮视频 | 日本双渗透| 国内精品欧美久久精品|