日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

16、ASP.NET MVC入门到精通——MVC过滤器

發(fā)布時(shí)間:2025/4/5 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16、ASP.NET MVC入门到精通——MVC过滤器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本系列目錄:ASP.NET MVC4入門(mén)到精通系列目錄匯總

在ASP.NET MVC中有四種過(guò)濾器類(lèi)型

?Action

1、在ASP.NET MVC項(xiàng)目中,新建文件夾Filter,然后新建類(lèi)MyCustormFilter,繼承自ActionFilterAttribute類(lèi),我們來(lái)看下ActionFilterAttribute類(lèi)有如下四個(gè)方法,從命名我應(yīng)該就可以看出他們的執(zhí)行時(shí)機(jī)。

public class MyCustormFilter:ActionFilterAttribute{public override void OnActionExecuting(ActionExecutingContext filterContext){filterContext.HttpContext.Response.Write("Action執(zhí)行前");base.OnActionExecuting(filterContext);}public override void OnActionExecuted(ActionExecutedContext filterContext){filterContext.HttpContext.Response.Write("Action執(zhí)行后");base.OnActionExecuted(filterContext);}}

2、對(duì)于過(guò)濾器,我們可以把它們加在三個(gè)地方,一個(gè)是控制器上面(控制器下面的所有Action),一個(gè)是Action上面(指定標(biāo)識(shí)的Action),另一個(gè)就是全局位置(所有控制器中的Action)。這里我只演示在Action上面加

?????? [MyCustormFilter]
??????? public ActionResult Index()
??????? {
??????????? return View();
??????? }
?????? public ActionResult Index1()
?????? {
?????????? return View();
}???

3、build然后運(yùn)行

Result

?1、新建類(lèi)TestResultFilter,繼承ActionFilterAttribute

public class TestResultFilter:ActionFilterAttribute{/// <summary>/// 加載 "視圖" 前執(zhí)行/// </summary>/// <param name="filterContext"></param>public override void OnResultExecuting(System.Web.Mvc.ResultExecutingContext filterContext){filterContext.HttpContext.Response.Write("加載視圖前執(zhí)行 OnResultExecuting <br/>");base.OnResultExecuting(filterContext);}/// <summary>/// 加載"視圖" 后執(zhí)行/// </summary>/// <param name="filterContext"></param>public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext){filterContext.HttpContext.Response.Write("加載視圖后執(zhí)行 OnResultExecuted <br/>");base.OnResultExecuted(filterContext);}}

2、這里我把TestResultFilter過(guò)濾器加在控制器上面

[TestResultFilter]public class FilterTestController : Controller{[MyCustormFilter]public ActionResult Index(){return View();}public ActionResult Index1(){return View();}}

3、運(yùn)行看下結(jié)果

注意:Result過(guò)濾器,無(wú)論Action的返回類(lèi)型為什么(甚至void)都將執(zhí)行。

RouteData中保存了當(dāng)前請(qǐng)求匹配的路由信息和路由對(duì)象

修改MyCustormFilter.cs

public override void OnActionExecuting(ActionExecutingContext filterContext){//1.獲取獲取請(qǐng)求的類(lèi)名和方法名string strController = filterContext.RouteData.Values["controller"].ToString();string strAction = filterContext.RouteData.Values["action"].ToString();//2.另一種方式 獲取請(qǐng)求的類(lèi)名和方法名string strAction2 = filterContext.ActionDescriptor.ActionName;string strController2 = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;filterContext.HttpContext.Response.Write("Action執(zhí)行前</br>");filterContext.HttpContext.Response.Write("控制器:" + strController + "</br>");filterContext.HttpContext.Response.Write("控制器:" + strController2+"</br>");filterContext.HttpContext.Response.Write("Action:" + strAction + "</br>");filterContext.HttpContext.Response.Write("Action:" + strAction2 + "</br>");base.OnActionExecuting(filterContext);}

?

AuthorizeAttribute

1、? 新建TestAuthorizeAttribute

/// <summary>/// 授權(quán)過(guò)濾器 --在Action過(guò)濾器前執(zhí)行/// </summary>public class TestAuthorizeAttribute:AuthorizeAttribute{public override void OnAuthorization(AuthorizationContext filterContext){filterContext.HttpContext.Response.Write("<br/>OnAuthorization<br/>");//注釋掉父類(lèi)方法,因?yàn)楦割?lèi)里的 OnAuthorization 方法會(huì)調(diào)用asp.net的授權(quán)驗(yàn)證機(jī)制!//base.OnAuthorization(filterContext);} }

2、在控制器FilterTest中的Index上添加TestAuthorize標(biāo)記

[MyCustormFilter][TestAuthorize]public ActionResult Index(){return View();}

運(yùn)行看下結(jié)果:

Exception

1、新建TestHandleError.cs

/// <summary>/// 異常處理 過(guò)濾器/// </summary>public class TestHandleError : HandleErrorAttribute{public override void OnException(ExceptionContext filterContext){//1.獲取異常對(duì)象Exception ex = filterContext.Exception;//2.記錄異常日志//3.重定向友好頁(yè)面filterContext.Result = new RedirectResult("~/error.html");//4.標(biāo)記異常已經(jīng)處理完畢filterContext.ExceptionHandled = true;base.OnException(filterContext);}}

2、在Action上面加TestHandleError

[TestHandleError]public ActionResult GetErr(){int a = 0;int b = 1 / a;return View();}

注意:通常這樣的異常處理我們是放在全局過(guò)濾器上面的。

public class FilterConfig{public static void RegisterGlobalFilters(GlobalFilterCollection filters){//filters.Add(new HandleErrorAttribute());//添加全局過(guò)濾器filters.Add(new TestHandleError());}}

?

總結(jié)

以上是生活随笔為你收集整理的16、ASP.NET MVC入门到精通——MVC过滤器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。