国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# 12 攔截器 Interceptors

這篇具有很好參考價值的文章主要介紹了C# 12 攔截器 Interceptors。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

攔截器Interceptors是一種可以在編譯時以聲明方式替換原有應用的方法。

這種替換是通過讓Interceptors聲明它攔截的調用的源位置來實現(xiàn)的。

您可以使用攔截器作為源生成器的一部分進行修改,而不是向現(xiàn)有源編譯添加代碼。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-841684.html

演示

使用 .NET 8 創(chuàng)建一個控制臺應用程序。并在PropertyGroup中添加以下配置.。需要將其中WebApplication6替換為自己的命名空間。

<InterceptorsPreviewNamespaces>$(InterceptorsPreviewNamespaces);WebApplication6</InterceptorsPreviewNamespaces>

然后在單獨的文件中創(chuàng)建InterceptsLocationAttribute。其命名空間必須是System.Runtime.CompilerServices,而不是應用程序的命名空間。

namespace System.Runtime.CompilerServices
{
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
    public sealed class InterceptsLocationAttribute(string filePath, int line, int character) : Attribute
    {
    }
}

該屬性包含三個參數(shù)。

  • filePath是您要攔截的文件的路徑。
  • line是您要攔截的代碼行。
  • character是您要攔截的代碼字符位置。

接著來創(chuàng)建一個具有三種方法的類,模擬新增/查詢用戶作為示例:

public class GetUserService
{
    // This method will not be intercepted;
    public void GetUserName()
    {
        Console.WriteLine("GetUserName");
    }

    // This method will be intercepted;
    public void AddUser()
    {
        Console.WriteLine("AddUser");
    }

    // This method will not be intercepted;
    public void DeleteUser()
    {
        Console.WriteLine("DeleteUser");
    }
}

在 Program.cs 文件中,我創(chuàng)建了此類的一個實例,并創(chuàng)建了對這三個方法中每一個的調用。輸出如下所示:

var userService = new GetUserService();

userService.GetUserName();
userService.AddUser();
userService.DeleteUser();

現(xiàn)在讓我們創(chuàng)建攔截類。該類必須遵循以下規(guī)則:

  • 一定是一個static類。
  • 必須是我們要攔截的類的擴展方法。
  • 必須具有該InterceptsLocation屬性,其中包含我們要攔截的文件路徑的值以及行號和字符號。

?

using System.Runtime.CompilerServices;

namespace WebApplication6
{
    public static class InterceptUserService
    {
        [InterceptsLocation(
    filePath: @"D:\demo\test\ConsoleApp1\WebApplication6\Program.cs",
    line: 14,
    character: 25)]
        public static void InterceptMethodAddUser(this GetUserService example)
        {
            Console.WriteLine("Interceptor is here!");
        }
    }
}

在此示例中,將攔截AddUser方法,并且將執(zhí)行InterceptMethodAddUser方法,而不是執(zhí)行方法AddUser。

filePath可以按以下方式獲取

C# 12 攔截器 Interceptors

?

行號和字符號可以按以下方式獲取

C# 12 攔截器 Interceptors

?

現(xiàn)在運行代碼,方法AddUser將被攔截,并且不會被執(zhí)行,而是實際執(zhí)行攔截器方法,以下是輸出:

C# 12 攔截器 Interceptors

?

到了這里,關于C# 12 攔截器 Interceptors的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SpringBoot加入攔截器——登錄攔截器的實現(xiàn)

    SpringBoot加入攔截器——登錄攔截器的實現(xiàn)

    ? ? ? ? 攔截器 Interceptor 在 Spring MVC 中的地位等同于 Servlet 規(guī)范中的過濾器 Filter,攔截的是處理器的執(zhí)行,由于是全局行為,因此常用于做一些通用的功能,如請求日志打印、權限控制等。 ? ? ? ? 核心原理:AOP思想 preHandle:? 預先處理,在目標的controller方法執(zhí)行之前,進行

    2024年02月15日
    瀏覽(19)
  • VUE3 請求攔截器 響應攔截器

    1,導入axios? (使用axios進行接口的請求,頁面發(fā)送http請求,很多情況我們要對請求和其響應進行特定的處理,如:判斷token,設置請求頭。如果請求數(shù)非常多,單獨對每一個請求進行處理會變得非常麻煩,程序的優(yōu)雅性也會大打折扣。所以axios為開發(fā)者提供了這樣一個API:攔

    2024年02月16日
    瀏覽(25)
  • 自定義注解與攔截器實現(xiàn)不規(guī)范sql攔截(攔截器實現(xiàn)篇)

    自定義注解與攔截器實現(xiàn)不規(guī)范sql攔截(攔截器實現(xiàn)篇)

    最近考慮myBatis中sql語句使用規(guī)范的問題,如果漏下條件或者寫一些不規(guī)范語句會對程序性能造成很大影響。最好的方法就是利用代碼進行限制,通過攔截器進行sql格式的判斷在自測環(huán)節(jié)就能找到問題。寫了個簡單情景下的demo,并通過idea插件來將myBatis的mapper方法都打上攔截器

    2024年01月22日
    瀏覽(29)
  • 【SpringBoot篇】Interceptor攔截器 | 攔截器和過濾器的區(qū)別

    【SpringBoot篇】Interceptor攔截器 | 攔截器和過濾器的區(qū)別

    攔截器(Interceptor)是一種軟件設計模式,用于在應用程序處理請求或響應時對其進行攔截和修改。攔截器可以在整個應用程序中使用,用于執(zhí)行跨越多個層的通用任務,如身份驗證、授權、緩存、日志記錄、性能計量等。 在Web開發(fā)中,攔截器通常用于在請求到達控制器之前

    2024年02月04日
    瀏覽(28)
  • WebService 客戶端增加Header頭、并且指定命名空間、添加攔截器(日志攔截器,自定義攔截器)、soap:Envelope 添加命名空間

    1.增加Header頭 生成XML結果如下 2.添加攔截器 3.soap:Envelope 添加命名空間 生成XML結果如下

    2024年02月10日
    瀏覽(29)
  • 微信小程序封裝request請求,包含請求攔截器,響應攔截器和請求重試功能

    微信小程序封裝request請求,包含請求攔截器,響應攔截器和請求重試功能

    在發(fā)送請求之前,先判斷用戶是否有token,沒有就執(zhí)行登陸請求,將token保存,然后再執(zhí)行原來請求; 擁有token,就直接執(zhí)行請求;但是用戶的這個token可能是過期的,如果執(zhí)行請求發(fā)現(xiàn)用戶登陸過期,就統(tǒng)一返回40001,然后對40001的響應統(tǒng)一處理,執(zhí)行登陸請求,再執(zhí)行原來請

    2024年02月13日
    瀏覽(28)
  • 分布式項目 16 購物車系統(tǒng),dubbo框架(重點是攔截器),優(yōu)化userId,配合攔截器

    分布式項目 16 購物車系統(tǒng),dubbo框架(重點是攔截器),優(yōu)化userId,配合攔截器

    01.創(chuàng)建jt-cart項目 第一步: 第二步: 第三步: 第四步: 在pom.xml文件中添加jt-common的依賴,如圖所示: 第五步: 添加插件 第六步:創(chuàng)建pojo實體類對象 說明:在jt-common項目下的com.jt.pojo創(chuàng)建Cart實體類 第七步:創(chuàng)建Dubbo接口 說明:在jt-common項目com.jt.service包下創(chuàng)建DubboCartSer

    2024年02月09日
    瀏覽(28)
  • axios攔截器

    一般在項目中,發(fā)送http請求時會對請求和響應進行一些特定的處理:判斷token,設置請求頭等,如果要挨個對每個請求都做處理的話太麻煩,方便起見,axios提供了攔截器。 axios攔截器分為請求攔截器和響應攔截器: 請求攔截器 響應攔截器 也可以移除攔截器 可以自定義axi

    2024年02月11日
    瀏覽(26)
  • MyBatis 攔截器介紹

    MyBatis 提供了一種插件 (plugin) 的功能,雖然叫做插件,但其實這是攔截器功能。那么攔截器攔截 MyBatis 中的哪些內容呢? 我們進入官網看一看: MyBatis 允許你在已映射語句執(zhí)行過程中的某一點進行攔截調用。默認情況下,MyBatis 允許使用插件來攔截的方法調用包括: Executor

    2024年02月15日
    瀏覽(21)
  • springboot實現(xiàn)攔截器

    內容:繼承 HandlerInterceptorAdapter 并實現(xiàn) WebMvcConfigurer , 攔截器中的方法將preHandle-Controller-postHandle-affterCompletion的順序執(zhí)行。 注意:只有preHandle方法返回true時后面的方法才會執(zhí)行。當攔截器鏈存在多個攔截器時,postHandle在所有攔截器內的所有攔截器返回成功時才會調用,而

    2024年02月02日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包