欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在ASP.NET?MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)的解決方法

 更新時間:2024年01月03日 15:12:40   作者:白沙王  
有時候,當(dāng)用戶請求一個Controller下的Action,我們希望,在單位時間間隔內(nèi),比如每秒,每分鐘,每小時,每天,每星期,限制同一個IP地址對某個Action的請求次數(shù),如何做呢?這篇文章主要介紹了在ASP.NET?MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù),需要的朋友可以參考下

在ASP.NET MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù) 

有時候,當(dāng)用戶請求一個Controller下的Action,我們希望,在單位時間間隔內(nèi),比如每秒,每分鐘,每小時,每天,每星期,限制同一個IP地址對某個Action的請求次數(shù)。如何做呢?

stefanprodan的MvcThrottle能很好地解決這個問題,以及其它類型的IP限制問題。在這里:GitHub - stefanprodan/MvcThrottle: ASP.NET MVC Throttling filter
把項目從GitHub下載下來,在本地打開。

找到MvcThrottle類庫,打開ThrottlingFilter這個類,在該類的OnActionExecuting方法中修改如下:

//check if limit is reached 
if (rateLimit > 0 && throttleCounter.TotalRequests > rateLimit)
{
  //log blocked request
  if (Logger != null) Logger.Log(ComputeLogEntry(requestId, identity, throttleCounter, rateLimitPeriod.ToString(), rateLimit, filterContext.HttpContext.Request));
  //break execution and return 409 
  var message = string.IsNullOrEmpty(QuotaExceededMessage) ?
  "HTTP request quota exceeded! maximum admitted {0} per {1}" : QuotaExceededMessage;
  //add status code and retry after x seconds to response
  filterContext.HttpContext.Response.StatusCode = (int)QuotaExceededResponseCode;
  filterContext.HttpContext.Response.Headers.Set("Retry-After", RetryAfterFrom(throttleCounter.Timestamp, rateLimitPeriod));
  filterContext.Result = QuotaExceededResult(
  filterContext.RequestContext,
  string.Format(message, rateLimit, rateLimitPeriod),
  QuotaExceededResponseCode,
  requestId);
  return;
}

把以上替換成

//check if limit is reached 
if (rateLimit > 0 && throttleCounter.TotalRequests > rateLimit)
{
filterContext.HttpContext.Response.Redirect("/Error.html");                               
return;
}  

讓其在超過次數(shù)時,跳轉(zhuǎn)到項目根目錄下的Error.html文件。

生成該類庫,類庫MvcThrottle.dll生成在類庫的bin/Debug文件夾下。

在ASP.NET MVC 4 下創(chuàng)建一個項目。

在項目根目錄下創(chuàng)建一個Library文件夾,把剛才的MvcThrottle.dll拷貝其中。

引用Library文件夾下的MvcThrottle.dll組件。

在App_Start文件夾中,修改FilterConfig類如下:

public class FilterConfig 
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            var throttleFilter = new ThrottlingFilter
            {
                Policy = new ThrottlePolicy(perSecond: 1, perMinute: 10, perHour: 60 * 10, perDay: 600 * 10)
                {
                    IpThrottling = true
                },
                Repository = new CacheRepository()
            };
            filters.Add(throttleFilter);
        }
    }

創(chuàng)建HomeController,編寫如下:

public class HomeController : Controller 
    {
        public ActionResult Index()
        {
            return View();
        }
        [EnableThrottling(PerSecond = 2, PerMinute = 5, PerHour = 30, PerDay = 300)]
        public ActionResult Other()
        {
            return View();
        }
        [HttpPost]
        [EnableThrottling(PerSecond = 2, PerMinute = 5, PerHour = 30, PerDay = 300)]
        public ActionResult GetSth()
        {
            return Json(new {msg=true});
        }
    }      

生成解決方案。

報錯了!What Happened?

原來MvcThrottle是ASP.NET MVC 5下開發(fā)的。

有辦法。重新打開MvcThrottle項目的類庫,在引用中刪除原來的System.Web.Mvc,重新引用本地ASP.NET MVC4版本,重新引用本地的System.Web.Mvc。

重新生成類庫,重新拷貝到Library文件夾下,成功生成解決方案。

在Home/Index.cshtml視圖中:

@{ 
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<input type="button" id="btn" value="請求"/>
@section scripts
{
    <script type="text/javascript">
        $(function() {
            $('#btn').on("click", function() {
                $.post('@Url.Action("GetSth")',function(data) {
                    if (data.msg) {
                        alert("請求成功一次");
                    } else {
                        alert("請求次數(shù)過多");
                    }
               });
           });
        });
    </script>
}

當(dāng)在單位時間間隔內(nèi)超過規(guī)定次數(shù),就彈出"請求次數(shù)過多"提示框。

在Home/Other.cshtml視圖中:

@{ 
    ViewBag.Title = "Other";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Other</h2>

當(dāng)在單位時間間隔內(nèi)超過規(guī)定次數(shù),就跳轉(zhuǎn)到預(yù)定的Error.html頁了。

到此這篇關(guān)于在ASP.NET MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)的解決方法的文章就介紹到這了,更多相關(guān)ASP.NET MVC請求次數(shù)限制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • asp.net 讀取Excel數(shù)據(jù)到DataTable的代碼

    asp.net 讀取Excel數(shù)據(jù)到DataTable的代碼

    asp.net 讀取Excel數(shù)據(jù)到DataTable的代碼,需要的朋友可以參考下。
    2010-03-03
  • .NET醫(yī)院公眾號系統(tǒng)線程CPU雙高問題分析

    .NET醫(yī)院公眾號系統(tǒng)線程CPU雙高問題分析

    這篇文章主要介紹了.NET醫(yī)院公眾號系統(tǒng) 線程CPU雙高分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • ASP.NET 性能優(yōu)化之反向代理緩存使用介紹

    ASP.NET 性能優(yōu)化之反向代理緩存使用介紹

    今天我們將要講到的是大型站點的一種常用做法,將緩存部署在反向代理服務(wù)器上,這類緩存我們通常稱之為反向代理緩存
    2011-10-10
  • .Net使用Cancellation?Framework取消并行任務(wù)

    .Net使用Cancellation?Framework取消并行任務(wù)

    這篇文章介紹了.Net使用Cancellation?Framework取消并行任務(wù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 輕量級ORM框架Dapper應(yīng)用之實現(xiàn)In操作

    輕量級ORM框架Dapper應(yīng)用之實現(xiàn)In操作

    這篇文章介紹了使用Dapper實現(xiàn)In操作的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • .NET連接數(shù)據(jù)庫以及基本的增刪改查操作教程

    .NET連接數(shù)據(jù)庫以及基本的增刪改查操作教程

    這篇文章主要給大家介紹了關(guān)于.NET連接數(shù)據(jù)庫以及基本的增刪改查操作教程的相關(guān)資料,對于剛?cè)腴T的新手們來說是個很好的入門教程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 詳解.Net Core中的日志組件(Logging)

    詳解.Net Core中的日志組件(Logging)

    這篇文章主要介紹了詳解.Net Core中的日志組件(Logging),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • ASP.NET遞歸法求階乘解決思路

    ASP.NET遞歸法求階乘解決思路

    遞歸就是在過程或函數(shù)里調(diào)用自身,在使用遞歸策略時,必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口遞歸算法解題通常顯得很簡潔,但遞歸算法解題的運行效率較低。所以一般不提倡用遞歸算法設(shè)計程序
    2012-12-12
  • Asp.net 2.0 無刷新圖片上傳 顯示縮略圖 具體實現(xiàn)

    Asp.net 2.0 無刷新圖片上傳 顯示縮略圖 具體實現(xiàn)

    簡單三步實現(xiàn)圖片無刷新上傳:注意是上傳,至于上傳時的驗證,比如圖片的尺寸,大小,格式。自行解決。如果我搞定了,也會貼上來的。
    2013-06-06
  • 一文搞懂MemoryCache 清除全部緩存的方法

    一文搞懂MemoryCache 清除全部緩存的方法

    這篇文章主要介紹了MemoryCache 清除全部緩存的方法,本文給大家介紹兩個方法,每種方法通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12

最新評論