<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          .net core 攔截器的使用 您所在的位置:網(wǎng)站首頁 命宮紅鸞天官 .net core 攔截器的使用

          .net core 攔截器的使用

          2024-06-21 04:31| 來源: 網(wǎng)絡(luò)整理| 查看: 265

          .net core 攔截器的使用

          實例代碼:https://gitee.com/D_C_L/InterceptorTest.git

          ?

          攔截器主要是將程序中的一些可以獨立出去的模塊進行攔截,比如幕等性,和身份認證服務(wù)等等,你想獨立出去的東西,ActionFilterAttribute請求攔截器他里面幾個方法,我們將一下的幾個方法進行重寫。

          1,OnActionExecuting:在執(zhí)行請求開始之前進行調(diào)用

          2,OnActionExecuted:在執(zhí)行請求開始之后進行調(diào)用

          3,OnResultExecuting:在執(zhí)行請求結(jié)束前進行調(diào)用

          4,OnResultExecuted:在執(zhí)行請求結(jié)束后進行調(diào)用

          列如:

          /// /// 在執(zhí)行請求開始之前進行調(diào)用 /// /// 執(zhí)行的上下文 public override void OnActionExecuting(ActionExecutingContext context) { context.HttpContext.Response.WriteAsync("在控制器執(zhí)行之前調(diào)用"); }

          里面可以編寫你的代碼,ActionExecutingContext 是請求進來的 上下文。

          ?

          這個是里面的一些屬性,你可以進行相對應(yīng)的使用。、

          異常攔截器的使用

          IExceptionFilter實現(xiàn)這個接口,在Startup類里面添加?app.UseExceptionHandler("/Home/Error");也可以調(diào)到錯誤頁面去。或者想下面重寫

          /// /// 當然是發(fā)生異常時被調(diào)用了 /// /// 執(zhí)行的上下文 public void OnException(ExceptionContext context) { context.HttpContext.Response.WriteAsync("當然是發(fā)生異常時被調(diào)用了"); context.ExceptionHandled = true;//異常已經(jīng)處理,不要再次處理了 }

          全局攔截

          如果說你要攔截你程序的所有請求,可以將攔截器配置到全局里面在Startup類添加一下代碼。

          ActionAttribute是你攔截器的類名 //全局攔截 services.AddMvc(options => { options.Filters.Add(typeof(ActionAttribute)); }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

          部分控制器不進行攔截

          當我們使用了全局攔截器之后,但是有的方法或者控制器我不想進行攔截器的話,我們可以編寫一個空的攔截器不使用全局攔截器。

          /// /// 不需要登陸的地方加個這個空的攔截器 /// public class NoSignAttribute : ActionFilterAttribute { }

          然后在方法或者控制器上面添加一下代碼

          NoSignAttribute本來攔截器名稱是這樣的,我們可以忽略后面的默認名命NoSign /// /// 不需要登錄使用這個[NoSign] 攔截器 /// /// [NoSign] public IActionResult Privacy() { return View(); }

          然后我們在全局的攔截器里面在加上一段判斷的代碼,其實這個就是加上的兩個攔截器,只是一個沒有用,判斷當前的請求方法或者控制上面有沒有這個空的攔截器,如果有說明我們這個方法或者控制器不需要被攔截。直接返回出去。

          /// /// 在控制器執(zhí)行之前調(diào)用 /// /// 執(zhí)行的上下文 public override void OnActionExecuting(ActionExecutingContext context) { // 判斷是否加上了不需要攔截 var noNeedCheck = false; if (context.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor) { noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true) .Any(a => a.GetType().Equals(typeof(NoSignAttribute))); } if (noNeedCheck) return; context.HttpContext.Response.WriteAsync("在控制器執(zhí)行之前調(diào)用"); }

          局部攔截

          如果說你只想攔截某個控制器或者某個方法的時候,你可以在方法或者控制器上面添加攔截器的注釋。

          ActionAttribute本來攔截器名稱是這樣的,我們可以忽略后面的默認名命Action

          /// /// 局部的使用攔截器 /// /// [Action] public IActionResult Index() { return View(); }

          當然如果你不想使用攔截器,喜歡用中間件也可以,在管道請求的管道中直接進行攔截,這也是可以的。

          ?如果有錯誤的地方,請幫我糾正。哈哈一起加油陌生人!!



          【本文地址】

          公司簡介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實驗室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 静乐县| 马尔康县| 五寨县| 观塘区| 西乌珠穆沁旗| 云南省| 溧水县| 铁力市| 高台县| 兰溪市| 铜梁县| 阿坝县| 桑日县| 攀枝花市| 花莲县| 襄汾县| 黄骅市| 平泉县| 栾城县| 观塘区| 罗平县| 桐乡市| 广平县| 丰顺县| 宁德市| 乌拉特中旗| 城市| 龙门县| 响水县| 增城市| 海林市| 金乡县| 朝阳县| 宁明县| 景洪市| 松潘县| 平果县| 行唐县| 抚远县| 锡林浩特市| 建平县| http://444 http://444 http://444 http://444 http://444 http://444