真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在ASP.NETmvc4項(xiàng)目中使用過濾器-創(chuàng)新互聯(lián)

這篇文章給大家介紹如何在ASP.NET mvc4項(xiàng)目中使用過濾器,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)按需開發(fā)網(wǎng)站,是成都網(wǎng)站建設(shè)公司,為小攪拌車提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站推廣熱線:13518219792

mvc4中的過濾器

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

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

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

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

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

過濾器的基本類型:

過濾器類型

接口

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

描述

Authorization

IAuthorizationFilter

AuthorizationAttribute

最先運(yùn)行

Action

IActionFilter

ActionFilterAttribute

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

Result

IResultFilter

ActionResultAttribute

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

Exception

IExceptionFilter

HandlerErrorAttribute

僅在過濾器、動作發(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)建一個自定義AuthorizeAttribute子類,再實(shí)現(xiàn)授權(quán)代碼比較容易。

public class CustomAuthAttribute:AuthorizeAttribute{

    /// 

    /// 是否對請求進(jìn)行授權(quán)訪問的方式

    /// 

    /// 對請求信息進(jìn)行訪問的方法

    protected override bool AuthorizeCore(HttpContextBase httpContext){

      return base.AuthorizeCore(httpContext);

    }

}

直接實(shí)現(xiàn)IAuthorizationFilter接口的主要原因是為了獲取對傳遞給OnAuthorization()的AuthorizationContext的訪問,通過它可以獲得更廣泛的信息(路由細(xì)節(jié)、當(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

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

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ā)生異常時(shí)調(diào)用。

    // 參數(shù):filterContext:

    //   篩選器上下文。

    void OnException(ExceptionContext filterContext);

  }

}

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

名稱

類型

描述

Controller

ControllerBase

返回請求的控制器對象

HttpContext

HttpContextBase

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

IsChildAction

Bool

若是自動做則返回true

RequestContext

RequestContext

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

RouteData

RouteData

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

繼承自ControllerContext的屬性

名稱

類型

描述

ActionDescripter

ActionDescripter

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

Result

ActionResult

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

Exception

Exception

未處理的異常

ExceptionHandled

Bool

如果另一個過濾器已經(jīng)把這個異常標(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

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

準(zhǔn)備工作:

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



 

  

 

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

 [HandleError(ExceptionType =typeof(ArgumentNullException),View ="Null")]

    public ActionResult Index(){

      return View();

  }

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

名稱

類型

描述

ActionName

String

返回生成異常的Action名稱

ControllerName

String

返回生成異常的Controller名稱

Exception

Exception

返回此異常

@model HandleErrorInfo

@{ 

  ViewBag.Title = "Sorry";

}







  





@Model.Exception.StackTrace



 備注:使用HandleError過濾器時(shí)一定要包含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

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

ActionExecutedContext 屬性


名稱

類型

描述

ActionDescriptor

ActionDescriptor

動作方法的描述

Canceled

Bool

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

Exception

Exception

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

ExceptionHandled

Bool

如果異常被處理返回true

Result

ActionResult

結(jié)果過濾器:

它會對動作方法所產(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);

  }

}

動作方法如何返回動作結(jié)果,讓用戶能夠?qū)幼鞣椒ǖ囊鈭D與動作方法的執(zhí)行分離。將結(jié)果過濾器運(yùn)用于一個動作方法時(shí)會在動作方法返回結(jié)果時(shí)、但在執(zhí)行該動作結(jié)果之前調(diào)用OnResultExecuting。動作結(jié)果執(zhí)行之后調(diào)用OnResultExecuted

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

Mvc框架包含一個內(nèi)建的類,可以用來創(chuàng)建動作過濾器和結(jié)果過濾器,這個類的名稱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);

  }

}

 使用這個類的好處是不需要重寫和實(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("
Total elapsed time:{0}
", 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。如果有未處理異常,框架在任一階段都會執(zhí)行異常過濾器

namespace System.Web.Mvc

{

  // 摘要:表示操作和結(jié)果篩選器特性的基類。

  public abstract class FilterAttribute : Attribute, IMvcFilter{

    // 摘要: 獲取或設(shè)置一個值,該值指示是否可指定篩選器特性的多個實(shí)例。

    // 返回結(jié)果:如果可指定篩選器特性的多個實(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

緩存一個Action的

ValidateInputand

ValidationAntiForgeryToken

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

AsyncTimeout

NoAsyncTimeout

用戶異步控制器

ChildActionOnlyAttribute

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

RequireHttps

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

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


關(guān)于如何在ASP.NET mvc4項(xiàng)目中使用過濾器就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


文章標(biāo)題:如何在ASP.NETmvc4項(xiàng)目中使用過濾器-創(chuàng)新互聯(lián)
URL鏈接:http://weahome.cn/article/epdjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部