<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ASP.NET Core Web API 中間件,實(shí)現(xiàn)速率限制無(wú)痛接入

          共 1553字,需瀏覽 4分鐘

           ·

          2023-06-21 21:53

          什么是速率限制?

          速率限制是一個(gè)用于控制特定資源在一段時(shí)間內(nèi)允許的請(qǐng)求次數(shù)的功能。

          在 .NET 7 中,我們可以使用內(nèi)置的速率限制器中間件來(lái)配置與速率限制相關(guān)的設(shè)置。

          那為什么要限制速率呢?

          首先,通過(guò)限制網(wǎng)絡(luò)流量,我們可以幫助降低服務(wù)器和網(wǎng)絡(luò)資源使用成本。

          此外,通過(guò)減少發(fā)回響應(yīng)的不必要延遲,還可以幫助我們提高應(yīng)用程序的性能。

          速率限制算法

          固定窗口算法是最簡(jiǎn)單的算法之一。它將請(qǐng)求限制為一個(gè)固定的時(shí)間窗口,該窗口在任何時(shí)間點(diǎn)都只允許固定數(shù)量的請(qǐng)求。

          滑動(dòng)窗口算法是固定窗口算法的改進(jìn)版本,它將請(qǐng)求限制為一個(gè)可變的窗口,該窗口在任何時(shí)間點(diǎn)都只允許固定數(shù)量的請(qǐng)求。

          令牌桶算法使用固定大小的令牌桶來(lái)限制請(qǐng)求的速率。令牌桶最初被填滿(mǎn)了指定數(shù)量的令牌。每次請(qǐng)求都會(huì)消耗一個(gè)令牌,如果令牌桶中沒(méi)有令牌,則該請(qǐng)求會(huì)被拒絕。

          并發(fā)算法是一種非常簡(jiǎn)單的算法,它只允許固定數(shù)量的并發(fā)請(qǐng)求,但是不限制一段時(shí)間內(nèi)的請(qǐng)求數(shù)。

          在 .NET 7 中使用速率限制中間件

          在 ASP.NET Core Web API 項(xiàng)目中使用速率限制中間件非常簡(jiǎn)單。

          首先,在 Program.cs 中添加以下代碼,使用固定窗口算法,它將在任何給定的時(shí)間窗口內(nèi)只允許固定數(shù)量的請(qǐng)求:

          builder.Services.AddRateLimiter(p => p  
              .AddFixedWindowLimiter(policyName: "FixedWindow", options =>  
              {  
                  options.PermitLimit = 3;  
                  options.Window = TimeSpan.FromSeconds(10);  
              }));  

          然后,將中間件添加到 HTTP 請(qǐng)求管道中:

          app.UseRateLimiter();  

          現(xiàn)在,我們可以使用 RateLimitAttribute 特性將速率限制器應(yīng)用于控制器的操作方法,如下所示:

          [HttpGet(Name = "GetWeatherForecast")]  
          [EnableRateLimiting("FixedWindow")]  
          public IEnumerable<WeatherForecast> Get()  

          啟動(dòng)應(yīng)用程序并嘗試使用 Swagger 發(fā)送一些請(qǐng)求,前三個(gè)請(qǐng)求將被接受,但是第四個(gè)請(qǐng)求將被拒絕。

          如果等待 10 秒鐘,然后再次發(fā)送請(qǐng)求,我們將再次獲得 3 個(gè)請(qǐng)求的限制。

          總結(jié)

          在 .NET 7 中使用速率限制中間件可以幫助我們更好地控制網(wǎng)絡(luò)流量,提高應(yīng)用程序的性能。







          回復(fù) 【關(guān)閉】學(xué)永久關(guān)閉App開(kāi)屏廣告
          回復(fù) 【刪除】學(xué)自動(dòng)檢測(cè)那個(gè)微信好友刪除、拉黑
          回復(fù) 【福利】學(xué)查看微粒貸額度獲取20元微信紅包
          回復(fù) 【手冊(cè)】獲取3萬(wàn)字.NET、C#工程師面試手冊(cè)
          回復(fù) 【幫助】獲取100+個(gè)常用的C#幫助類(lèi)庫(kù)
          回復(fù) 【加群】加入DotNet學(xué)習(xí)交流群

          瀏覽 21
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久久久有精品国产白浆天美传媒 | 亚洲区色情区激情区小说纯熟调抖 | 亚洲中文第一页 | 免费啊啊啊黄色视频 | 黄在线免费看 |