• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
    當前位置: 首頁 - 科技 - 知識百科 - 正文

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

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

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

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

    mvc4中的過濾器

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

    交叉關注:用于整個應用程序,又不適合放在某個局部位置的功能。

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

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

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

    過濾器的基本類型:

    過濾器類型

    接口

    默認實現(xiàn)

    描述

    Authorization

    IAuthorizationFilter

    AuthorizationAttribute

    最先運行

    Action

    IActionFilter

    ActionFilterAttribute

    在動作方法前后運行

    Result

    IResultFilter

    ActionResultAttribute

    在動作結果被執(zhí)行前后

    Exception

    IExceptionFilter

    HandlerErrorAttribute

    僅在過濾器、動作發(fā)生異常時

    授權過濾器:IAuthorizationFilter

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

    注意:

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

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

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

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

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

    當直接使用AuthorizeAttribute時,可以使用它的public屬性來指定授權策略

    AuthorizeAttribute屬性

    名稱

    類型

    描述

    Users

    String

    一個逗號分隔的用戶名列表,指定這些用戶可以訪問動作方法

    Roles

    String

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

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

    異常過濾器:

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

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

    名稱

    類型

    描述

    Controller

    ControllerBase

    返回請求的控制器對象

    HttpContext

    HttpContextBase

    提供對請求細節(jié)的訪問及對響應的訪問

    IsChildAction

    Bool

    若是自動做則返回true

    RequestContext

    RequestContext

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

    RouteData

    RouteData

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

    繼承自ControllerContext的屬性

    名稱

    類型

    描述

    ActionDescripter

    ActionDescripter

    提供動作方法的細節(jié)

    Result

    ActionResult

    用于動作方法的結果,通過非空值可取消請求

    Exception

    Exception

    未處理的異常

    ExceptionHandled

    Bool

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

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

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

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

    HandleErrorAttribute屬性

    名稱

    類型

    描述

    ExceptionType

    Type

    由過濾器處理的異常類型

    View

    String

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

    Master

    String

    在渲染這個過濾器的視圖時使用的布局名稱

    準備工作:

    在web.config文件中啟用自定義錯誤時,HandleErrorAttribute過濾器才會生效,在<system.web>節(jié)點中添加一個customErrors屬性即可;

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

    Mode屬性的默認值是RemoteOnly在開發(fā)期間,HandleErrorAttribute將不會攔截異常,但當應用程序部署到產(chǎn)品服務器時,并從另一臺計算機發(fā)出請求時HandleErrorAttribute變生效

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

    在渲染視圖時HandleErrorAttribute過濾器會傳遞一個HandleErrorInfo視圖模型對象這是一個封裝了異常細節(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過濾器時一定要包含Model.Exception.StackTrace否則視圖不會顯示給用戶,引用沒必要給用戶展示堆棧信息所以可以將該值放入div并隱藏

     動作過濾器

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

    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

    動作方法的描述

    Result

    ActionResult

    動作方法的結果,設置屬性非空值,過濾器可以取消請求

    ActionExecutedContext 屬性

    名稱

    類型

    描述

    ActionDescriptor

    ActionDescriptor

    動作方法的描述

    Canceled

    Bool

    如果該動作被另一個過濾器取消,則返回true

    Exception

    Exception

    返回由另一個過濾器或動作方法拋出的異常

    ExceptionHandled

    Bool

    如果異常被處理返回true

    Result

    ActionResult

    結果過濾器:

    它會對動作方法所產(chǎn)生的結果進行操作

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

    動作方法如何返回動作結果,讓用戶能夠將動作方法的意圖與動作方法的執(zhí)行分離。將結果過濾器運用于一個動作方法時會在動作方法返回結果時、但在執(zhí)行該動作結果之前調(diào)用OnResultExecuting。動作結果執(zhí)行之后調(diào)用OnResultExecuted

    內(nèi)建的動作過濾器和結果過濾器

    Mvc框架包含一個內(nèi)建的類,可以用來創(chuàng)建動作過濾器和結果過濾器,這個類的名稱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í)行操作結果后由 ASP.NET MVC 框架調(diào)用。
    
     // 參數(shù):filterContext:
    
     // 篩選器上下文。
    
     public virtual void OnResultExecuted(ResultExecutedContext filterContext);
    
     // 摘要:在執(zhí)行操作結果之前由 ASP.NET MVC 框架調(diào)用。
    
     // 參數(shù):filterContext:
    
     // 篩選器上下文。
    
     public virtual void OnResultExecuting(ResultExecutingContext filterContext);
    
     }
    
    }
    
    

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

    自定義實例:

    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

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

    ①全局過濾器

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

    ②實現(xiàn)接口

    ③注解

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

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

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

    內(nèi)建過濾器

    過濾器

    描述

    RequireHttps

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

    OutputCache

    緩存一個Action的

    ValidateInputand

    ValidationAntiForgeryToken

    與安全性有關的授權過濾器

    AsyncTimeout

    NoAsyncTimeout

    用戶異步控制器

    ChildActionOnlyAttribute

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

     

    RequireHttps

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

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

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

    文檔

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

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

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99热这里只有精品国产66| 精品国产一区二区三区2021| 国产精品亚洲产品一区二区三区| 亚洲精品乱码久久久久久不卡| 四虎国产精品免费观看| 精品无码国产一区二区三区51安| 精品无码专区亚洲| 亚洲精品一二区| japanese乱人伦精品| 亚洲精品成人片在线观看精品字幕 | 国产日韩精品中文字无码| 色婷婷久久久SWAG精品| 国产精品人人做人人爽人人添| 2022免费国产精品福利在线| 亚洲国产精品VA在线观看麻豆| 四虎国产精品成人免费久久| 国产精品无码v在线观看| 亚洲日本精品一区二区| 老司机91精品网站在线观看| 国产精品成人免费福利| 99久久婷婷免费国产综合精品| 国语精品一区二区三区| 欧美精品v欧洲精品| 亚洲国产精品无码久久久不卡 | 亚洲精品国产美女久久久| 久久精品亚洲精品国产欧美| 国产精品视频免费一区二区| 成人精品一区二区三区| 亚洲精品高清视频| 秋霞久久国产精品电影院| 久久精品免费一区二区三区| 久久精品国产亚洲麻豆| 欧美久久精品一级c片片| 久久精品视频网| 99久久精品国产一区二区| 亚洲无删减国产精品一区| 91久久精品电影| 国产精品国产三级国产a| 国产精品视频一区二区三区不卡| 国产综合免费精品久久久| 久久久久成人精品无码|