国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

ASP.NET MVC限制同一個IP地址單位時間間隔內的請求次數

瀏覽:111日期:2022-06-08 15:19:06

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

stefanprodan的MvcThrottle能很好地解決這個問題,以及其它類型的IP限制問題。在這里:https://github.com/stefanprodan/MvcThrottle

把項目從GitHub下載下來,在本地打開。

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

//check if limit is reachedif (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 reachedif (rateLimit > 0 && throttleCounter.TotalRequests > rateLimit){    filterContext.HttpContext.Response.Redirect("/Error.html");           return;}  

讓其在超過次數時,跳轉到項目根目錄下的Error.html文件。

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

在ASP.NET MVC 4 下創建一個項目。

在項目根目錄下創建一個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);}    }

創建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下開發的。

有辦法。重新打開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("請求次數過多");    }});    });});    </script>}

當在單位時間間隔內超過規定次數,就彈出"請求次數過多"提示框。

在Home/Other.cshtml視圖中:

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

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對的支持。如果你想了解更多相關內容請查看下面相關鏈接

標簽: ASP.NET
相關文章:
主站蜘蛛池模板: 一本一道久久综合狠狠老 | 怡红院免费全部视频在线视频 | 日韩在线视频线视频免费网站 | 99re久久精品国产首页2020 | 无限资源中文免费 | 日韩视频在线观看 | 2021国内自拍 | 欧美视频在线观在线看 | 国产三级视频在线播放 | 18女人毛片大全 | 久久99热精品免费观看欧美 | 欧美88| 成年女人免费又黄又爽视频 | 国产性大片黄在线观看在线放 | 波多野结衣免费免费视频一区 | 精品自拍视频在线观看 | 亚洲精品久久久久影院 | 欧美一级黄色毛片 | 波多野结衣aⅴ在线 | 国产孕妇孕交一级毛片 | 亚洲网站在线观看 | 国产黄网| 亚洲久久久 | 免费老外的毛片清高 | 日本作爱 | 九九国产精品九九 | 国产成人爱片免费观看视频 | 米奇888在线播放欧美 | 亚洲精品国产精品一区二区 | 亚洲精品久久九九精品 | 欧美特级特黄a大片免费 | 成人高清在线观看 | 成人一级黄色片 | 国产成人亚洲综合一区 | freesex寂寞老妇hd | 99精品久久秒播无毒不卡 | 欧美三级三级三级爽爽爽 | 国产一级特黄特色aa毛片 | 成人免费ā片 | 国产高清在线精品免费 | 日韩亚洲一区中文字幕在线 |