<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答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
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

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

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

        ASP.NET mvc4中的過濾器的使用:mvc4中的過濾器 過濾器(Filter)把附加邏輯注入到MVC框架的請求處理。實(shí)現(xiàn)了交叉關(guān)注。 交叉關(guān)注:用于整個(gè)應(yīng)用程序,又不適合放在某個(gè)局部位置的功能。 過濾器是.NET的注解屬性(Attribute),它們對請求處理管道添加了額外的步驟。 注解屬性是派生于Syst
        推薦度:
        導(dǎo)讀ASP.NET mvc4中的過濾器的使用:mvc4中的過濾器 過濾器(Filter)把附加邏輯注入到MVC框架的請求處理。實(shí)現(xiàn)了交叉關(guān)注。 交叉關(guān)注:用于整個(gè)應(yīng)用程序,又不適合放在某個(gè)局部位置的功能。 過濾器是.NET的注解屬性(Attribute),它們對請求處理管道添加了額外的步驟。 注解屬性是派生于Syst

        mvc4中的過濾器

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

        交叉關(guān)注:用于整個(gè)應(yīng)用程序,又不適合放在某個(gè)局部位置的功能。

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

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

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

        過濾器的基本類型:

        過濾器類型

        接口

        默認(rèn)實(shí)現(xiàn)

        描述

        Authorization

        IAuthorizationFilter

        AuthorizationAttribute

        最先運(yùn)行

        Action

        IActionFilter

        ActionFilterAttribute

        在動(dòng)作方法前后運(yùn)行

        Result

        IResultFilter

        ActionResultAttribute

        在動(dòng)作結(jié)果被執(zhí)行前后

        Exception

        IExceptionFilter

        HandlerErrorAttribute

        僅在過濾器、動(dòng)作發(fā)生異常時(shí)

        授權(quán)過濾器:IAuthorizationFilter

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

        注意:

        直接實(shí)現(xiàn)接口其實(shí)是一件非常危險(xiǎn)的事;因此創(chuàng)建一個(gè)自定義AuthorizeAttribute子類,再實(shí)現(xiàn)授權(quán)代碼比較容易。

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

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

        內(nèi)建的授權(quán)過濾器:

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

        當(dāng)直接使用AuthorizeAttribute時(shí),可以使用它的public屬性來指定授權(quán)策略

        AuthorizeAttribute屬性

        名稱

        類型

        描述

        Users

        String

        一個(gè)逗號分隔的用戶名列表,指定這些用戶可以訪問動(dòng)作方法

        Roles

        String

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

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

        異常過濾器:

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

        當(dāng)一個(gè)未處理的異常出現(xiàn)時(shí),OnException()被調(diào)用。該方法的參數(shù)是一個(gè)ExceptionContext 對象,此對象派生于ControllerContext,并提供了許多有用的屬性。

        名稱

        類型

        描述

        Controller

        ControllerBase

        返回請求的控制器對象

        HttpContext

        HttpContextBase

        提供對請求細(xì)節(jié)的訪問及對響應(yīng)的訪問

        IsChildAction

        Bool

        若是自動(dòng)做則返回true

        RequestContext

        RequestContext

        提供對HttpContext和路由數(shù)據(jù)的訪問

        RouteData

        RouteData

        返回請求的路由數(shù)據(jù)

        繼承自ControllerContext的屬性

        名稱

        類型

        描述

        ActionDescripter

        ActionDescripter

        提供動(dòng)作方法的細(xì)節(jié)

        Result

        ActionResult

        用于動(dòng)作方法的結(jié)果,通過非空值可取消請求

        Exception

        Exception

        未處理的異常

        ExceptionHandled

        Bool

        如果另一個(gè)過濾器已經(jīng)把這個(gè)異常標(biāo)記為已處理則返回true

        實(shí)現(xiàn)自定義異常過濾器

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

        使用內(nèi)建的異常過濾器:

        HandleErrorAttribute屬性

        名稱

        類型

        描述

        ExceptionType

        Type

        由過濾器處理的異常類型

        View

        String

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

        Master

        String

        在渲染這個(gè)過濾器的視圖時(shí)使用的布局名稱

        準(zhǔn)備工作:

        在web.config文件中啟用自定義錯(cuò)誤時(shí),HandleErrorAttribute過濾器才會(huì)生效,在<system.web>節(jié)點(diǎn)中添加一個(gè)customErrors屬性即可;

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

        Mode屬性的默認(rèn)值是RemoteOnly在開發(fā)期間,HandleErrorAttribute將不會(huì)攔截異常,但當(dāng)應(yīng)用程序部署到產(chǎn)品服務(wù)器時(shí),并從另一臺(tái)計(jì)算機(jī)發(fā)出請求時(shí)HandleErrorAttribute變生效

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

        在渲染視圖時(shí)HandleErrorAttribute過濾器會(huì)傳遞一個(gè)HandleErrorInfo視圖模型對象這是一個(gè)封裝了異常細(xì)節(jié)的封裝程序

        名稱

        類型

        描述

        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過濾器時(shí)一定要包含Model.Exception.StackTrace否則視圖不會(huì)顯示給用戶,引用沒必要給用戶展示堆棧信息所以可以將該值放入div并隱藏

         動(dòng)作過濾器

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

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

        ActionExecutingContext 屬性

        名稱

        類型

        描述

        ActionDescriptor

        ActionDescriptor

        動(dòng)作方法的描述

        Result

        ActionResult

        動(dòng)作方法的結(jié)果,設(shè)置屬性非空值,過濾器可以取消請求

        ActionExecutedContext 屬性

        名稱

        類型

        描述

        ActionDescriptor

        ActionDescriptor

        動(dòng)作方法的描述

        Canceled

        Bool

        如果該動(dòng)作被另一個(gè)過濾器取消,則返回true

        Exception

        Exception

        返回由另一個(gè)過濾器或動(dòng)作方法拋出的異常

        ExceptionHandled

        Bool

        如果異常被處理返回true

        Result

        ActionResult

        結(jié)果過濾器:

        它會(huì)對動(dòng)作方法所產(chǎn)生的結(jié)果進(jìn)行操作

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

        動(dòng)作方法如何返回動(dòng)作結(jié)果,讓用戶能夠?qū)?dòng)作方法的意圖與動(dòng)作方法的執(zhí)行分離。將結(jié)果過濾器運(yùn)用于一個(gè)動(dòng)作方法時(shí)會(huì)在動(dòng)作方法返回結(jié)果時(shí)、但在執(zhí)行該動(dòng)作結(jié)果之前調(diào)用OnResultExecuting。動(dòng)作結(jié)果執(zhí)行之后調(diào)用OnResultExecuted

        內(nèi)建的動(dòng)作過濾器和結(jié)果過濾器

        Mvc框架包含一個(gè)內(nèi)建的類,可以用來創(chuàng)建動(dòng)作過濾器和結(jié)果過濾器,這個(gè)類的名稱ActionFilterAttribute

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

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

        自定義實(shí)例:

        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

        過濾器的幾種實(shí)現(xiàn)形式:

        ①全局過濾器

        在FilterConfig中直接注冊實(shí)現(xiàn)類

        ②實(shí)現(xiàn)接口

        ③注解

        對過濾器執(zhí)行排序

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

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

        內(nèi)建過濾器

        過濾器

        描述

        RequireHttps

        強(qiáng)迫Action使用Https協(xié)議

        OutputCache

        緩存一個(gè)Action的

        ValidateInputand

        ValidationAntiForgeryToken

        與安全性有關(guān)的授權(quán)過濾器

        AsyncTimeout

        NoAsyncTimeout

        用戶異步控制器

        ChildActionOnlyAttribute

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

         

        RequireHttps

        RequireHttps過濾器讓Action強(qiáng)制使用HTTPS協(xié)議。他將用戶瀏覽器重定向到同一個(gè)動(dòng)作,但使用‘https://'協(xié)議前綴

        在形成不安全請求時(shí),重寫HandledNonHttpsRequest(),以創(chuàng)建自定義行為,該過濾器僅用于GET請求,POST則會(huì)丟掉數(shù)據(jù);該過濾器時(shí)授權(quán)過濾器

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

        文檔

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

        ASP.NET mvc4中的過濾器的使用:mvc4中的過濾器 過濾器(Filter)把附加邏輯注入到MVC框架的請求處理。實(shí)現(xiàn)了交叉關(guān)注。 交叉關(guān)注:用于整個(gè)應(yīng)用程序,又不適合放在某個(gè)局部位置的功能。 過濾器是.NET的注解屬性(Attribute),它們對請求處理管道添加了額外的步驟。 注解屬性是派生于Syst
        推薦度:
        標(biāo)簽: 的使用 過濾器 net
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品乱码久久久久久蜜桃不卡| 亚洲乱亚洲乱妇24p| 国产成人高清亚洲一区久久| 久久精品视频免费播放| 亚洲人成色7777在线观看| 国产成人精品免费大全| 亚洲?v无码国产在丝袜线观看| 国产L精品国产亚洲区久久 | 无码永久免费AV网站| 久久综合图区亚洲综合图区| 两个人日本WWW免费版| 亚洲一区二区三区自拍公司| 99视频在线观看免费| 久久国产成人精品国产成人亚洲| 亚洲AV乱码久久精品蜜桃| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 亚洲综合自拍成人| 在线观看的免费网站无遮挡| 亚洲国产美女视频| 少妇高潮太爽了在线观看免费| 亚洲高清无码综合性爱视频| 永久免费观看黄网站| 亚洲色大成网站WWW久久九九 | 国产亚洲精品自在久久| 色www永久免费网站| 亚洲Av综合色区无码专区桃色| 亚洲欧美日韩一区二区三区在线| 一级特黄aaa大片免费看| 亚洲另类激情专区小说图片| a级精品九九九大片免费看| 久久精品国产亚洲av麻豆色欲| 亚洲大尺度无码无码专线一区| 精品视频一区二区三区免费| 亚洲专区在线视频| 91免费国产在线观看| 亚洲成在人线aⅴ免费毛片| 国产精品亚洲综合专区片高清久久久| 最新国产精品亚洲| 亚洲无码高清在线观看| 中文字幕免费在线| 欧洲乱码伦视频免费国产|