最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

stefanprodan的MvcThrottle能很好地解決這個(gè)問(wèn)題,以及其它類型的IP限制問(wèn)題。在這里:GitHub - stefanprodan/MvcThrottle: ASP.NET MVC Throttling filter
把項(xiàng)目從GitHub下載下來(lái),在本地打開。

找到MvcThrottle類庫(kù),打開ThrottlingFilter這個(gè)類,在該類的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;
}  

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

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

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

在項(xiàng)目根目錄下創(chuàng)建一個(gè)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});
        }
    }      

生成解決方案。

報(bào)錯(cuò)了!What Happened?

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

有辦法。重新打開MvcThrottle項(xiàng)目的類庫(kù),在引用中刪除原來(lái)的System.Web.Mvc,重新引用本地ASP.NET MVC4版本,重新引用本地的System.Web.Mvc。

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

在Home/Index.cshtml視圖中:

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

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

在Home/Other.cshtml視圖中:

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

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

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

相關(guān)文章

  • .Net 對(duì)于PDF生成以及各種轉(zhuǎn)換的操作

    .Net 對(duì)于PDF生成以及各種轉(zhuǎn)換的操作

    這篇文章主要介紹了.Net 對(duì)于PDF生成以及各種轉(zhuǎn)換的操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 基于nopCommerce的開發(fā)框架 附源碼

    基于nopCommerce的開發(fā)框架 附源碼

    這篇文章主要為大家詳細(xì)介紹了基于nopCommerce的開發(fā)框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 詳解Asp.net web.config customErrors 如何設(shè)置

    詳解Asp.net web.config customErrors 如何設(shè)置

    這篇文章主要介紹了詳解Asp.net web.config customErrors 如何設(shè)置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • 詳解GridView自帶的編輯刪除更新功能

    詳解GridView自帶的編輯刪除更新功能

    本文主要介紹了GridView自帶的編輯、刪除、更新功能實(shí)現(xiàn)的方法。具有一定的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • Asp.net后臺(tái)把腳本樣式輸出到head標(biāo)簽中節(jié)省代碼冗余

    Asp.net后臺(tái)把腳本樣式輸出到head標(biāo)簽中節(jié)省代碼冗余

    最近在學(xué)習(xí)開發(fā)服務(wù)器控件,其它就少不了為控件注冊(cè)js和css之類的資源文件,或者直接注冊(cè)純腳本樣式。其中就遇到如下問(wèn)題     1、 注冊(cè)的資源文件或純腳本樣式在生成的頁(yè)面中都不在head標(biāo)簽中(當(dāng)然這個(gè)不影響頁(yè)面功能)     2、 一個(gè)頁(yè)面使用多個(gè)一樣的控件時(shí),會(huì)出現(xiàn)重復(fù)輸入(出現(xiàn)多余代碼)
    2013-02-02
  • Community Server專題二:體系結(jié)構(gòu)

    Community Server專題二:體系結(jié)構(gòu)

    Community Server專題二:體系結(jié)構(gòu)...
    2007-03-03
  • Asp.Net Core Identity 隱私數(shù)據(jù)保護(hù)的實(shí)現(xiàn)

    Asp.Net Core Identity 隱私數(shù)據(jù)保護(hù)的實(shí)現(xiàn)

    這篇文章主要介紹了Asp.Net Core Identity 隱私數(shù)據(jù)保護(hù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • .NET Core實(shí)現(xiàn)RabbitMQ消息隊(duì)列的示例代碼

    .NET Core實(shí)現(xiàn)RabbitMQ消息隊(duì)列的示例代碼

    RabbitMQ支持AMQP協(xié)議,可以通過(guò)多種方式與應(yīng)用程序交互,本文主要介紹了.NET Core實(shí)現(xiàn)RabbitMQ消息隊(duì)列的示例代碼,實(shí)現(xiàn)在生產(chǎn)者端發(fā)送消息,消費(fèi)者端接收消息,并確保消息的可靠性
    2025-05-05
  • asp.net core分塊上傳文件示例

    asp.net core分塊上傳文件示例

    這篇文章主要介紹了asp.net core分塊上傳文件示例,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 詳解.net core webapi 前后端開發(fā)分離后的配置和部署

    詳解.net core webapi 前后端開發(fā)分離后的配置和部署

    這篇文章主要介紹了.net core webapi 前后端開發(fā)分離后的配置和部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

铁岭县| 蚌埠市| 富宁县| 屏东市| 延安市| 虞城县| 德保县| 雷波县| 克什克腾旗| 义马市| 龙南县| 长寿区| 湘潭市| 晋州市| 云霄县| 尼勒克县| 招远市| 大化| 玉山县| 乐都县| 西安市| 襄城县| 东阳市| 彰化市| 灵台县| 南丰县| 轮台县| 金阳县| 偏关县| 观塘区| 柳州市| 鲁甸县| 拜城县| 鄯善县| 宕昌县| 登封市| 高雄市| 甘泉县| 抚顺市| 延吉市| 沁水县|