{"id":72000,"date":"2024-11-03T23:16:33","date_gmt":"2024-11-03T23:16:33","guid":{"rendered":"https:\/\/goodwriterz.com\/site\/?p=72000"},"modified":"2024-11-03T23:16:33","modified_gmt":"2024-11-03T23:16:33","slug":"%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%aa%d9%82%d9%8a%d9%8a%d9%85-%d8%b7%d9%84%d8%a8%d8%a7%d8%aa-%d8%a7%d9%84%d8%ad%d8%af-%d9%81%d9%8a-blazor-asp-net-core","status":"publish","type":"post","link":"https:\/\/goodwriterz.com\/site\/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%aa%d9%82%d9%8a%d9%8a%d9%85-%d8%b7%d9%84%d8%a8%d8%a7%d8%aa-%d8%a7%d9%84%d8%ad%d8%af-%d9%81%d9%8a-blazor-asp-net-core\/","title":{"rendered":"\u0643\u064a\u0641\u064a\u0629 \u062a\u0642\u064a\u064a\u0645 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u062d\u062f \u0641\u064a Blazor\/ASP.NET Core"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_68_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title \" >\u062c\u062f\u0648\u0644 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/goodwriterz.com\/site\/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%aa%d9%82%d9%8a%d9%8a%d9%85-%d8%b7%d9%84%d8%a8%d8%a7%d8%aa-%d8%a7%d9%84%d8%ad%d8%af-%d9%81%d9%8a-blazor-asp-net-core\/#%D8%B1%D9%88%D8%A7%D8%A8%D8%B7_%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9\" title=\"\u0631\u0648\u0627\u0628\u0637 \u0633\u0631\u064a\u0639\u0629\">\u0631\u0648\u0627\u0628\u0637 \u0633\u0631\u064a\u0639\u0629<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/goodwriterz.com\/site\/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%aa%d9%82%d9%8a%d9%8a%d9%85-%d8%b7%d9%84%d8%a8%d8%a7%d8%aa-%d8%a7%d9%84%d8%ad%d8%af-%d9%81%d9%8a-blazor-asp-net-core\/#%D9%84%D9%85%D8%A7%D8%B0%D8%A7_%D8%B7%D9%84%D8%A8%D8%A7%D8%AA_%D8%AD%D8%AF_%D8%A7%D9%84%D8%B3%D8%B9%D8%B1%D8%9F\" title=\"\u0644\u0645\u0627\u0630\u0627 \u0637\u0644\u0628\u0627\u062a \u062d\u062f \u0627\u0644\u0633\u0639\u0631\u061f\">\u0644\u0645\u0627\u0630\u0627 \u0637\u0644\u0628\u0627\u062a \u062d\u062f \u0627\u0644\u0633\u0639\u0631\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/goodwriterz.com\/site\/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%aa%d9%82%d9%8a%d9%8a%d9%85-%d8%b7%d9%84%d8%a8%d8%a7%d8%aa-%d8%a7%d9%84%d8%ad%d8%af-%d9%81%d9%8a-blazor-asp-net-core\/#%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF_%D8%AA%D8%AD%D8%AF%D9%8A%D8%AF_%D8%A7%D9%84%D9%85%D8%B9%D8%AF%D9%84_%D9%81%D9%8A_ASPNET_Core\" title=\"\u0625\u0639\u062f\u0627\u062f \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0641\u064a ASP.NET Core\">\u0625\u0639\u062f\u0627\u062f \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0641\u064a ASP.NET Core<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/goodwriterz.com\/site\/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%aa%d9%82%d9%8a%d9%8a%d9%85-%d8%b7%d9%84%d8%a8%d8%a7%d8%aa-%d8%a7%d9%84%d8%ad%d8%af-%d9%81%d9%8a-blazor-asp-net-core\/#%D8%AA%D9%83%D9%88%D9%8A%D9%86_%D8%A7%D9%84%D8%AD%D8%AF_%D9%85%D9%86_%D8%A7%D9%84%D9%85%D8%B9%D8%AF%D9%84\" title=\"\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062d\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u062f\u0644\">\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062d\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u062f\u0644<\/a><\/li><\/ul><\/nav><\/div>\n<div>\n<div class=\"w-table-content\">\n<h3 class=\"title icon i-flash\"><span class=\"ez-toc-section\" id=\"%D8%B1%D9%88%D8%A7%D8%A8%D8%B7_%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9\"><\/span>\u0631\u0648\u0627\u0628\u0637 \u0633\u0631\u064a\u0639\u0629<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"table-content\">\n<div class=\"w-table-content-list\">\n<ul class=\"table-content-list\">\n<li class=\"table-content-element icon\">\n<div class=\"table-content-link\"><a rel=\"nofollow noopener\" target=\"_blank\" href=\"#setting-up-rate-limiting-in-asp-net-core\">\u0625\u0639\u062f\u0627\u062f \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0641\u064a ASP.NET Core<\/a> <\/div>\n<\/li>\n<\/ul>\n<ul class=\"table-content-list\">\n<li class=\"table-content-element icon\">\n<div class=\"table-content-link\"><a rel=\"nofollow noopener\" target=\"_blank\" href=\"#configuring-rate-limiting\">\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062d\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u062f\u0644<\/a> <\/div>\n<\/li>\n<\/ul><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>\u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0646\u0634\u0626 \u0648\u0627\u062c\u0647\u0629 \u0628\u0631\u0645\u062c\u0629 \u062a\u0637\u0628\u064a\u0642\u0627\u062a \u0639\u0627\u0645\u0629 \u0623\u0648 \u0645\u0648\u0642\u0639\u064b\u0627 \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u064b\u0627 \u0639\u0627\u0645\u064b\u0627\u060c \u0641\u0645\u0646 \u0627\u0644\u0645\u062d\u062a\u0645\u0644 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0642\u0644\u0642\u064b\u0627 \u0628\u0634\u0623\u0646 \u0627\u0644\u0623\u062f\u0627\u0621. \u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u0633\u0627\u0639\u062f \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0641\u064a \u0645\u0646\u0639 \u0625\u0633\u0627\u0621\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u062c\u0645\u0627\u062a DDoS \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629\u060c \u0648\u0645\u0646 \u0627\u0644\u0633\u0647\u0644 \u062c\u062f\u064b\u0627 \u0625\u0639\u062f\u0627\u062f \u062a\u0637\u0628\u064a\u0642\u0627\u062a Blazor\/ASP.NET Core.<\/p>\n<p><!-- Repeatable debug data: {\"injection\":\"before\",\"adPosition\":0,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":0,\"nbrPlacementsScanned\":0,\"ruleCount\":200,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":215} --><!-- Zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"after\",\"adPosition\":1,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":1,\"nbrPlacementsScanned\":0,\"ruleCount\":200,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":0} --><br \/>\n<!-- Repeatable debug data: {\"isEarlyInjection\":false,\"currentRuleCount\":200,\"actualCount\":0,\"hasActualCountMetThreshold\":null,\"countRemainingForInjection\":null,\"nextBlockCount\":null,\"hasCountRemainingForInjectionMetThreshold\":null} --><br \/>\n<!-- No winning ad found for zone: below first paragraph! --><br \/>\n<!-- No winning ad found for zone: native in content! --><\/p>\n<h2 id=\"why-rate-limit-requests\"><span class=\"ez-toc-section\" id=\"%D9%84%D9%85%D8%A7%D8%B0%D8%A7_%D8%B7%D9%84%D8%A8%D8%A7%D8%AA_%D8%AD%D8%AF_%D8%A7%D9%84%D8%B3%D8%B9%D8%B1%D8%9F\"><\/span>  \u0644\u0645\u0627\u0630\u0627 \u0637\u0644\u0628\u0627\u062a \u062d\u062f \u0627\u0644\u0633\u0639\u0631\u061f <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u0627\u0643 \u0627\u0644\u0643\u062b\u064a\u0631 \u0645\u0646 \u0627\u0644\u0623\u0633\u0628\u0627\u0628 \u0644\u062a\u0642\u064a\u064a\u0645 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u062d\u062f. \u0645\u0646 \u0627\u0644\u0645\u062d\u062a\u0645\u0644 \u0623\u0646 \u062a\u0636\u0639 \u0645\u0639\u0638\u0645 \u0627\u0644\u062e\u062f\u0645\u0627\u062a \u062d\u062f\u064b\u0627 \u0644\u0644\u0633\u0639\u0631\u060c \u0644\u0623\u0646\u0647 \u0644\u0646 \u064a\u0642\u0648\u0645 \u0623\u064a \u0625\u0646\u0633\u0627\u0646 \u0639\u0627\u0642\u0644 \u0628\u062a\u0642\u062f\u064a\u0645 100 \u0637\u0644\u0628 \u0641\u064a \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u0644\u0645\u062f\u0629 \u0639\u0634\u0631 \u062f\u0642\u0627\u0626\u0642 \u0645\u062a\u0648\u0627\u0635\u0644\u0629. \u0627\u0641\u062a\u0631\u0627\u0636\u064a\u064b\u0627\u060c \u0633\u064a\u0633\u062a\u062c\u064a\u0628 \u062a\u0637\u0628\u064a\u0642\u0643 \u0644\u0643\u0644 \u0637\u0644\u0628\u060c \u0644\u0630\u0627 \u0641\u0625\u0646 \u062a\u0639\u064a\u064a\u0646 \u062d\u062f \u0645\u0639\u0642\u0648\u0644 \u064a\u0639\u062f \u0641\u0643\u0631\u0629 \u062c\u064a\u062f\u0629.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":1,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":1,\"nbrPlacementsScanned\":1,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":321} --><\/p>\n<p>\u0628\u0627\u0644\u0637\u0628\u0639\u060c \u0642\u062f \u064a\u062a\u0645\u062a\u0639 \u0645\u0632\u0648\u062f \u0627\u0644\u062e\u062f\u0645\u0629 \u0627\u0644\u0633\u062d\u0627\u0628\u064a\u0629 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u0623\u064a\u0636\u064b\u0627 \u0628\u062d\u0645\u0627\u064a\u0629 DDoS. \u0648\u0647\u0630\u0627 \u0639\u0627\u062f\u0629\u064b \u0645\u0627 \u064a\u0648\u0641\u0631 \u062d\u0645\u0627\u064a\u0629 \u062c\u064a\u062f\u0629 \u0636\u062f \u0647\u062c\u0645\u0627\u062a \u0627\u0644\u0637\u0628\u0642\u0629 3 \u06484 \u0627\u0644\u062a\u064a \u062a\u0633\u062a\u0647\u062f\u0641 \u062e\u0627\u062f\u0645\u0643. \u0648\u0645\u0639 \u0630\u0644\u0643\u060c \u0633\u062a\u0638\u0644 \u062a\u0631\u064a\u062f \u0627\u0644\u062a\u0623\u0643\u062f \u0645\u0646 \u0623\u0646 \u0627\u0644\u062e\u0627\u062f\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u064a\u0641\u0639\u0644 \u0643\u0644 \u0645\u0627 \u0641\u064a \u0648\u0633\u0639\u0647 \u0644\u0645\u0646\u0639 \u0627\u0644\u0645\u0647\u0627\u062c\u0645\u064a\u0646 \u0645\u0646 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u064a\u0647.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":1,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":1,\"nbrPlacementsScanned\":1,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":576} --><\/p>\n<p>\u0644\u062f\u064a\u0643 \u0623\u064a\u0636\u064b\u0627 \u062e\u064a\u0627\u0631 \u062a\u0639\u064a\u064a\u0646 \u062d\u062f \u0623\u0642\u0644 \u0628\u0643\u062b\u064a\u0631 \u0644\u0644\u062d\u062f \u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0639\u0644\u0649 \u0648\u0627\u062c\u0647\u0627\u062a \u0628\u0631\u0645\u062c\u0629 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\u0627\u062a \u0627\u0644\u0639\u0627\u0645\u0629. \u0639\u0644\u0649 \u0633\u0628\u064a\u0644 \u0627\u0644\u0645\u062b\u0627\u0644\u060c \u0631\u0628\u0645\u0627 \u062a\u062a\u0637\u0644\u0628 \u0646\u0642\u0637\u0629 \u0646\u0647\u0627\u064a\u0629 \u0645\u0639\u064a\u0646\u0629 \u0627\u0644\u0643\u062b\u064a\u0631 \u0645\u0646 \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629 \u0644\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0629 \u0644\u0644\u0637\u0644\u0628. \u0642\u062f \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u0646\u0642\u0637\u0629 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 \u0647\u0630\u0647 \u0628\u062d\u064a\u062b \u0644\u0627 \u064a\u062a\u0645\u0643\u0646 \u0623\u064a \u0639\u0646\u0648\u0627\u0646 IP \u0648\u0627\u062d\u062f \u0645\u0646 \u062a\u0642\u062f\u064a\u0645 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0628\u0636\u0639\u0629 \u0637\u0644\u0628\u0627\u062a \u0643\u0644 \u0628\u0636\u0639 \u062b\u0648\u0627\u0646\u064d\u060c \u0645\u0645\u0627 \u064a\u062d\u062f \u0645\u0646 \u0627\u0644\u0636\u063a\u0637 \u0639\u0644\u0649 \u0627\u0644\u062e\u0627\u062f\u0645\/\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643.<\/p>\n<p><!-- Repeatable debug data: {\"injection\":\"before\",\"adPosition\":1,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":1,\"nbrPlacementsScanned\":1,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":921} --><!-- Zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"after\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":1,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":0} --><br \/>\n<!-- Repeatable debug data: {\"isEarlyInjection\":false,\"currentRuleCount\":900,\"actualCount\":0,\"hasActualCountMetThreshold\":null,\"countRemainingForInjection\":null,\"nextBlockCount\":null,\"hasCountRemainingForInjectionMetThreshold\":null} --><\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":0} --><\/p>\n<h2 id=\"setting-up-rate-limiting-in-asp-net-core\"><span class=\"ez-toc-section\" id=\"%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF_%D8%AA%D8%AD%D8%AF%D9%8A%D8%AF_%D8%A7%D9%84%D9%85%D8%B9%D8%AF%D9%84_%D9%81%D9%8A_ASPNET_Core\"><\/span>  \u0625\u0639\u062f\u0627\u062f \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0641\u064a ASP.NET Core <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062a\u0645 \u0628\u0646\u0627\u0621 Blazor \u0643\u0625\u0637\u0627\u0631 \u0639\u0645\u0644 \u0639\u0644\u0649 ASP.NET Core\u060c \u0627\u0644\u0630\u064a \u064a\u062a\u0639\u0627\u0645\u0644 \u0645\u0639 \u0643\u0627\u0641\u0629 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u0648\u062c\u0648\u062f\u0629 \u062a\u062d\u062a \u0627\u0644\u063a\u0637\u0627\u0621 \u0644\u062a\u0634\u063a\u064a\u0644 \u062e\u0627\u062f\u0645 HTTP \u0648\u0627\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0629 \u0644\u0644\u0637\u0644\u0628\u0627\u062a. \u0644\u0630\u0627\u060c \u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u0643\u0648\u064a\u0646 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0644\u0640 ASP.NET Core. \u0633\u064a\u062a\u0645 \u062a\u0637\u0628\u064a\u0642 \u0646\u0641\u0633 \u0627\u0644\u062e\u0637\u0648\u0627\u062a \u0639\u0644\u0649 \u0623\u064a \u0634\u062e\u0635 \u0644\u0627 \u064a\u0633\u062a\u062e\u062f\u0645 Blazor.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":270} --><\/p>\n<p>\u0644\u0627 \u064a\u0639\u062f \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0645\u064a\u0632\u0629 \u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0641\u064a ASP.NET Core \u0644\u0644\u0623\u0633\u0641. \u0648\u0645\u0639 \u0630\u0644\u0643\u060c \u0647\u0646\u0627\u0643 \u062d\u0632\u0645\u0629 NuGet \u0634\u0627\u0626\u0639\u0629 \u062c\u062f\u064b\u0627\u060c <\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":388} --><\/p>\n<pre><code class=\"hljs \">AspNetCoreRateLimit<\/code> <\/pre>\n<p>\u060c \u0627\u0644\u0630\u064a \u064a\u0642\u0648\u0645 \u0628\u0647\u0630\u0647 \u0627\u0644\u0645\u0647\u0645\u0629 \u0628\u0634\u0643\u0644 \u062c\u064a\u062f. \u064a\u0645\u0643\u0646\u0643 \u062a\u062b\u0628\u064a\u062a\u0647 \u0639\u0646 \u0637\u0631\u064a\u0642 \u0627\u0644\u0646\u0642\u0631 \u0628\u0632\u0631 \u0627\u0644\u0645\u0627\u0648\u0633 \u0627\u0644\u0623\u064a\u0645\u0646 \u0639\u0644\u0649 \u0645\u0634\u0631\u0648\u0639\u0643 \u0641\u064a Visual Studio \u0648\u062a\u062d\u062f\u064a\u062f &#8220;\u0625\u062f\u0627\u0631\u0629 \u062d\u0632\u0645 NuGet&#8230;&#8221;:<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":529} --><\/p>\n<div class=\"body-img landscape \">\n<div class=\"responsive-img image-expandable img-article-item\">\n<figure><img data-recalc-dims=\"1\" decoding=\"async\" width=\"670\" height=\"469\" loading=\"lazy\" alt=\"\/wordpress\/wp-content\/uploads\/csit\/2021\/06\/8f69067f.png\" data-img-url=\"https:\/\/goodwriterz.com\/site\/wp-content\/uploads\/2024\/11\/\u0643\u064a\u0641\u064a\u0629-\u062a\u0642\u064a\u064a\u0645-\u0637\u0644\u0628\u0627\u062a-\u0627\u0644\u062d\u062f-\u0641\u064a-BlazorASPNET-Core.png\" src=\"https:\/\/i0.wp.com\/goodwriterz.com\/site\/wp-content\/uploads\/2024\/11\/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%82%D9%8A%D9%8A%D9%85-%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%AF-%D9%81%D9%8A-BlazorASPNET-Core.png?resize=670%2C469&#038;ssl=1\" style=\"height:auto;max-width:100%\" title=\"\">  <\/figure>\n<\/p><\/div>\n<\/p><\/div>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":769} --><\/p>\n<p>\u0628\u062d\u062b \u0639\u0646 <\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":781} --><\/p>\n<pre><code class=\"hljs \">AspNetCoreRateLimit<\/code> <\/pre>\n<p> \u0648\u062a\u062b\u0628\u064a\u062a\u0647.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":798} --><br \/>\n<!-- Repeatable debug data: {\"isEarlyInjection\":true,\"currentRuleCount\":900,\"actualCount\":798,\"hasActualCountMetThreshold\":true,\"countRemainingForInjection\":102,\"nextBlockCount\":240,\"hasCountRemainingForInjectionMetThreshold\":true,\"nextCount\":1038} --><\/p>\n<p><!-- Repeatable debug data: {\"injection\":\"before\",\"adPosition\":2,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":2,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":true,\"actualCount\":900} --><!-- Zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"after\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":2,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":true,\"actualCount\":0} --><\/p>\n<div class=\"body-img landscape \">\n<div class=\"responsive-img image-expandable img-article-item\">\n<figure><img data-recalc-dims=\"1\" decoding=\"async\" width=\"700\" height=\"229\" loading=\"lazy\" alt=\"\/wordpress\/wp-content\/uploads\/csit\/2021\/06\/9f151c21.png\" data-img-url=\"https:\/\/goodwriterz.com\/site\/wp-content\/uploads\/2024\/11\/1730675791_954_\u0643\u064a\u0641\u064a\u0629-\u062a\u0642\u064a\u064a\u0645-\u0637\u0644\u0628\u0627\u062a-\u0627\u0644\u062d\u062f-\u0641\u064a-BlazorASPNET-Core.png\" src=\"https:\/\/i0.wp.com\/goodwriterz.com\/site\/wp-content\/uploads\/2024\/11\/1730675791_954_%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%82%D9%8A%D9%8A%D9%85-%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%AF-%D9%81%D9%8A-BlazorASPNET-Core.png?resize=700%2C229&#038;ssl=1\" style=\"height:auto;max-width:100%\" title=\"\">  <\/figure>\n<\/p><\/div>\n<\/p><\/div>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":138} --><\/p>\n<p>\u0647\u0646\u0627\u0643 \u0639\u062f\u0629 \u0637\u0631\u0642 \u0644\u0644\u0642\u064a\u0627\u0645 \u0628\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644. \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0633\u062a\u062e\u062f\u0645 \u0648\u0627\u062c\u0647\u0629 \u0628\u0631\u0645\u062c\u0629 \u062a\u0637\u0628\u064a\u0642\u0627\u062a \u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0645\u0641\u0627\u062a\u064a\u062d\u060c \u0641\u0646\u0648\u0635\u064a \u0628\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0628\u0646\u0627\u0621\u064b \u0639\u0644\u0649 \u0645\u0641\u062a\u0627\u062d \u0648\u0627\u062c\u0647\u0629 \u0628\u0631\u0645\u062c\u0629 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\u0627\u062a\u060c \u0648\u0627\u0644\u0630\u064a \u064a\u063a\u0637\u064a \u062c\u0645\u064a\u0639 \u0627\u0644\u062d\u0627\u0644\u0627\u062a. \u0628\u0627\u0644\u0646\u0633\u0628\u0629 \u0644\u0645\u0639\u0638\u0645 \u0627\u0644\u0623\u0634\u062e\u0627\u0635\u060c \u0645\u0646 \u0627\u0644\u0645\u062d\u062a\u0645\u0644 \u0623\u0646 \u064a\u0643\u0648\u0646 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0627\u0633\u062a\u0646\u0627\u062f\u064b\u0627 \u0625\u0644\u0649 \u0639\u0646\u0648\u0627\u0646 IP \u0623\u0645\u0631\u064b\u0627 \u062c\u064a\u062f\u064b\u0627\u060c \u0648\u0647\u0648 \u0627\u0644\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0627\u0644\u0645\u0648\u0635\u0649 \u0628\u0647 \u0628\u0648\u0627\u0633\u0637\u0629 AspNetCoreRateLimit.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":410} --><\/p>\n<p>\u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0625\u0636\u0627\u0641\u062a\u0647\u0627 \u0643\u062e\u062f\u0645\u0629 \u0625\u0644\u0649 ASP.NET. \u062a\u0645 \u062a\u0643\u0648\u064a\u0646 \u0643\u0627\u0641\u0629 \u0627\u0644\u062e\u062f\u0645\u0627\u062a \u0641\u064a <\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":488} --><\/p>\n<pre><code class=\"hljs css\"><span class=\"hljs-selector-tag\">Startup<\/span><span class=\"hljs-selector-class\">.cs<\/span><\/code> <\/pre>\n<p>\u060c \u0627\u0644\u0630\u064a \u064a\u0636\u064a\u0641\u0647\u0645 \u0645\u0639 <\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":515} --><\/p>\n<pre><code class=\"hljs \">ConfigureServices(IServiceCollection services)<\/code> <\/pre>\n<p> \u0648\u0638\u064a\u0641\u0629.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":526} --><\/p>\n<p>\u0647\u0646\u0627\u0643 \u0639\u062f\u062f \u063a\u064a\u0631 \u0642\u0644\u064a\u0644 \u0645\u0646 \u0627\u0644\u062e\u062f\u0645\u0627\u062a \u0644\u062a\u0643\u0648\u064a\u0646\u0647\u0627. \u062a\u0642\u0648\u0645 \u0627\u0644\u0648\u0638\u064a\u0641\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u0628\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062e\u062f\u0645\u0627\u062a \u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0645\u0646 \u0645\u0644\u0641 \u0627\u0644\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643. \u0633\u062a\u062d\u062a\u0627\u062c \u0623\u064a\u0636\u064b\u0627 \u0625\u0644\u0649 \u0625\u0636\u0627\u0641\u0629 \u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0645\u0624\u0642\u062a \u0644\u0630\u0627\u0643\u0631\u0629 Microsoft \u0625\u0630\u0627 \u0644\u0645 \u062a\u0643\u0646 \u0642\u062f \u0642\u0645\u062a \u0628\u0630\u0644\u0643 \u0628\u0627\u0644\u0641\u0639\u0644. \u0628\u0639\u062f \u0630\u0644\u0643\u060c \u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u0643\u0648\u064a\u0646 IpRateLimiting \u0645\u0646 \u0645\u0644\u0641 JSON\u060c \u062b\u0645 \u0625\u0636\u0627\u0641\u0629 \u0645\u062d\u062f\u062f \u0627\u0644\u0645\u0639\u062f\u0644.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":828} --><\/p>\n<pre> \/\/ needed to load configuration from appsettings.json \n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":883} -->\n<p> services.AddOptions();<\/p>\n<!-- Repeatable debug data: {\"injection\":\"before\",\"adPosition\":3,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":3,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":906} --><!-- Zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"after\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":3,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":0} -->\n<!-- Repeatable debug data: {\"isEarlyInjection\":false,\"currentRuleCount\":900,\"actualCount\":0,\"hasActualCountMetThreshold\":null,\"countRemainingForInjection\":null,\"nextBlockCount\":null,\"hasCountRemainingForInjectionMetThreshold\":null} -->\n<p> \/\/ needed to store rate limit counters and ip rules<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":52} -->\n<p> services.AddMemoryCache();<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":79} -->\n<p> \/\/load general configuration from appsettings.json<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":130} -->\n<p> services.Configure(Configuration.GetSection(\"IpRateLimiting\"));<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":194} -->\n<p> \/\/ inject counter and rules stores<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":229} -->\n<p> services.AddInMemoryRateLimiting();<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":265} -->\n<p> \/\/ configuration (resolvers, counter key builders)<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":316} -->\n<p> services.AddSingleton();<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":396} -->\n<\/pre>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":396} --><\/p>\n<p>\u0623\u064a\u0636\u0627 \u0641\u064a <\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":404} --><\/p>\n<pre><code class=\"hljs css\"><span class=\"hljs-selector-tag\">Startup<\/span><span class=\"hljs-selector-class\">.cs<\/span><\/code> <\/pre>\n<p>\u060c \u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u0643\u0648\u064a\u0646 \u0623\u062f\u0627\u0629 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\u0627\u062a \u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062a\u062d\u062f\u064a\u062f \u0645\u0639\u062f\u0644 IP.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":479} --><\/p>\n<pre>app.UseIpRateLimiting();<\/pre>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":503} --><\/p>\n<p>\u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u0623\u0646 \u0647\u0630\u0627 \u064a\u0633\u062a\u062e\u062f\u0645 \u062a\u062d\u062f\u064a\u062f \u0645\u0639\u062f\u0644 \u0627\u0644\u0630\u0627\u0643\u0631\u0629\u060c \u0648\u0647\u0648 \u0644\u0643\u0644 \u0645\u062b\u064a\u0644. \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0642\u0648\u0645 \u0628\u0645\u0648\u0627\u0632\u0646\u0629 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643\u060c \u0641\u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u062e\u0632\u0646 \u0630\u0627\u0643\u0631\u0629 \u0645\u0648\u0632\u0639 \u0645\u062b\u0644 Redis\u060c \u0627\u0644\u0630\u064a \u062a\u0648\u0641\u0631\u0647 \u0647\u0630\u0647 \u0627\u0644\u062d\u0632\u0645\u0629 <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/stefanprodan\/AspNetCoreRateLimit\/wiki\/IpRateLimitMiddleware#setup\">\u0644\u062f\u064a\u0647 \u0623\u064a\u0636\u0627 \u062f\u0639\u0645 \u0644.<\/a><\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":720} --><\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":720} --><\/p>\n<h2 id=\"configuring-rate-limiting\"><span class=\"ez-toc-section\" id=\"%D8%AA%D9%83%D9%88%D9%8A%D9%86_%D8%A7%D9%84%D8%AD%D8%AF_%D9%85%D9%86_%D8%A7%D9%84%D9%85%D8%B9%D8%AF%D9%84\"><\/span>  \u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062d\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u062f\u0644 <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0645\u062c\u0631\u062f \u0625\u0636\u0627\u0641\u062a\u0647 \u0625\u0644\u0649 ASP.NET\u060c \u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0627\u0644\u062a\u0648\u062c\u0647 \u0625\u0644\u0649 \u0645\u0644\u0641 <code>appsettings.json<\/code> \u0645\u0644\u0641 \u0627\u0644\u062a\u0643\u0648\u064a\u0646 \u0644\u0625\u0639\u062f\u0627\u062f\u0647. \u064a\u0628\u062f\u0648 \u0627\u0644\u062a\u0643\u0648\u064a\u0646 \u0643\u0645\u0627 \u064a\u0644\u064a:<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":885} --><\/p>\n<pre>\"IpRateLimiting\": {\n<!-- Repeatable debug data: {\"injection\":\"before\",\"adPosition\":4,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":4,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":904} --><!-- Zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"after\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":4,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":0} -->\n<!-- Repeatable debug data: {\"isEarlyInjection\":false,\"currentRuleCount\":900,\"actualCount\":0,\"hasActualCountMetThreshold\":null,\"countRemainingForInjection\":null,\"nextBlockCount\":null,\"hasCountRemainingForInjectionMetThreshold\":null} -->\n<p> \"EnableEndpointRateLimiting\": false,<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":37} -->\n<p> \"StackBlockedRequests\": true,<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":67} -->\n<p> \"RealIpHeader\": \"X-Real-IP\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":96} -->\n<p> \"ClientIdHeader\": \"X-ClientId\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":128} -->\n<p> \"HttpStatusCode\": 429,<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":151} -->\n<p> \"IpWhitelist\": ( \"127.0.0.1\", \"::1\/10\", \"192.168.0.0\/24\" ),<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":211} -->\n<p> \"EndpointWhitelist\": ( \"get:\/api\/license\", \"*:\/api\/status\" ),<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":273} -->\n<p> \"ClientWhitelist\": ( \"dev-id-1\", \"dev-id-2\" ),<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":320} -->\n<p> \"GeneralRules\": (<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":338} -->\n<p> {<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":340} -->\n<p> \"Endpoint\": \"*\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":357} -->\n<p> \"Period\": \"1s\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":373} -->\n<p> \"Limit\": 2<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":384} -->\n<p> },<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":387} -->\n<p> {<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":389} -->\n<p> \"Endpoint\": \"*\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":406} -->\n<p> \"Period\": \"15m\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":423} -->\n<p> \"Limit\": 100<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":436} -->\n<p> },<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":439} -->\n<p> {<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":441} -->\n<p> \"Endpoint\": \"*\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":458} -->\n<p> \"Period\": \"12h\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":475} -->\n<p> \"Limit\": 1000<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":489} -->\n<p> },<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":492} -->\n<p> {<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":494} -->\n<p> \"Endpoint\": \"*\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":511} -->\n<p> \"Period\": \"7d\",<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":527} -->\n<p> \"Limit\": 10000<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":542} -->\n<p> }<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":544} -->\n<p> )<\/p>\n<!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":546} -->\n<p> }<\/p><\/pre>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":548} --><\/p>\n<p>\u0623\u0648\u0644\u0627\u064b\u060c \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u062e\u0637\u0637 \u0644\u062a\u0642\u064a\u064a\u0645 \u062d\u062f\u0648\u062f \u0628\u0639\u0636 \u0646\u0642\u0627\u0637 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 \u0628\u0634\u0643\u0644 \u0645\u062e\u062a\u0644\u0641\u060c \u0641\u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u0634\u063a\u064a\u0644 EnableEndpointRateLimiting\u060c \u0648\u0647\u0648 \u062e\u0637\u0623 \u0627\u0641\u062a\u0631\u0627\u0636\u064a\u064b\u0627.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":694} --><\/p>\n<p>\u0633\u062a\u062c\u0639\u0644 StackBlockedRequests \u0623\u064a \u0637\u0644\u0628\u0627\u062a \u0645\u062d\u0638\u0648\u0631\u0629 \u064a\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628\u0647\u0627 \u0641\u064a \u0627\u0644\u0639\u062f\u0627\u062f. \u0641\u064a \u0627\u0644\u0623\u0633\u0627\u0633\u060c \u0645\u0639 \u0625\u064a\u0642\u0627\u0641 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631\u060c \u0633\u064a\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 X \u0645\u0646 \u0627\u0644\u0631\u062f\u0648\u062f \u0644\u0643\u0644 \u0641\u062a\u0631\u0629 \u0644\u0623\u064a \u0634\u062e\u0635 \u064a\u0642\u062f\u0645 \u0637\u0644\u0628\u0627\u062a \u0645\u0631\u0627\u0631\u064b\u0627 \u0648\u062a\u0643\u0631\u0627\u0631\u064b\u0627. \u0648\u0645\u0639 \u062a\u0634\u063a\u064a\u0644\u0647\u060c \u0633\u064a\u0639\u0645\u0644\u0648\u0646 \u0639\u0644\u0649 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0645\u0646 \u0627\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0627\u062a \u0628\u0633\u0631\u0639\u0629 \u0643\u0628\u064a\u0631\u0629\u060c \u0648\u0645\u0646 \u062b\u0645 \u0644\u0646 \u064a\u062a\u0645 \u0627\u0644\u0631\u062f \u0639\u0644\u064a\u0647\u0645 \u0623\u064a\u0636\u064b\u0627 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649.<\/p>\n<p><!-- Repeatable debug data: {\"injection\":\"before\",\"adPosition\":5,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":5,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":973} --><!-- Zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"after\",\"adPosition\":6,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":6,\"nbrPlacementsScanned\":5,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":false,\"actualCount\":0} --><br \/>\n<!-- Repeatable debug data: {\"isEarlyInjection\":false,\"currentRuleCount\":900,\"actualCount\":0,\"hasActualCountMetThreshold\":null,\"countRemainingForInjection\":null,\"nextBlockCount\":null,\"hasCountRemainingForInjectionMetThreshold\":null} --><\/p>\n<p>\u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 RealIpHeader \u0648ClientIdHeader \u0639\u0646\u062f\u0645\u0627 \u064a\u0643\u0648\u0646 \u0627\u0644\u062e\u0627\u062f\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u062e\u0644\u0641 \u0648\u0643\u064a\u0644 \u0639\u0643\u0633\u064a\u060c \u0648\u0647\u0648 \u0625\u0639\u062f\u0627\u062f \u0634\u0627\u0626\u0639. \u0646\u0638\u0631\u064b\u0627 \u0644\u0623\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0633\u062a\u0623\u062a\u064a \u062f\u0627\u0626\u0645\u064b\u0627 \u0645\u0646 \u0627\u0644\u062e\u0627\u062f\u0645 \u0627\u0644\u0648\u0643\u064a\u0644\u060c \u064a\u0642\u0648\u0645 \u0627\u0644\u0648\u0643\u064a\u0644 \u0628\u062a\u0639\u064a\u064a\u0646 \u0631\u0623\u0633 \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0641\u0639\u0644\u064a\u0629 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645. \u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u0644\u0648\u0643\u064a\u0644 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u0648\u0627\u0644\u062a\u0623\u0643\u062f \u0645\u0646 \u062a\u0639\u064a\u064a\u0646 \u0647\u0630\u0627 \u0627\u0644\u0631\u0623\u0633 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d\u060c \u0648\u0625\u0644\u0627 \u0641\u0625\u0646 \u0645\u062d\u062f\u062f \u0627\u0644\u0633\u0639\u0631 \u0633\u064a\u0639\u0627\u0645\u0644 \u0627\u0644\u062c\u0645\u064a\u0639 \u0639\u0644\u0649 \u0623\u0646\u0647\u0645 \u0646\u0641\u0633 \u0639\u0646\u0648\u0627\u0646 IP.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":6,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":6,\"nbrPlacementsScanned\":6,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":357} --><\/p>\n<p>\u0628\u0639\u062f \u0630\u0644\u0643\u060c \u0647\u0646\u0627\u0643 \u062b\u0644\u0627\u062b \u0642\u0648\u0627\u0626\u0645 \u0628\u064a\u0636\u0627\u0621\u060c \u0648\u0627\u062d\u062f\u0629 \u0644\u0639\u0646\u0627\u0648\u064a\u0646 IP \u0648\u0645\u0639\u0631\u0641\u0627\u062a \u0627\u0644\u0639\u0645\u064a\u0644 \u0648\u0646\u0642\u0627\u0637 \u0627\u0644\u0646\u0647\u0627\u064a\u0629. \u064a\u0645\u0643\u0646\u0643 \u0625\u0632\u0627\u0644\u0629 \u0647\u0630\u0647 \u0625\u0630\u0627 \u0644\u0645 \u062a\u0643\u0646 \u0641\u064a \u062d\u0627\u062c\u0629 \u0625\u0644\u064a\u0647\u0627.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":6,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":6,\"nbrPlacementsScanned\":6,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":475} --><\/p>\n<p>\u0648\u0628\u0639\u062f \u0630\u0644\u0643\u060c \u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u0643\u0648\u064a\u0646 \u0643\u0644 \u0646\u0642\u0637\u0629 \u0646\u0647\u0627\u064a\u0629\u060c \u0628\u0627\u0644\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0627\u0644\u0641\u062a\u0631\u0629 \u0648\u0627\u0644\u062d\u062f. \u0633\u064a\u063a\u0637\u064a \u062d\u0631\u0641 \u0627\u0644\u0628\u062f\u0644 \u0643\u0644 \u0634\u064a\u0621 \u0648\u0647\u0648 \u0627\u0644\u0634\u064a\u0621 \u0627\u0644\u0648\u062d\u064a\u062f \u0627\u0644\u0630\u064a \u064a\u0639\u0645\u0644 \u0645\u0639 \u062a\u0639\u064a\u064a\u0646 EnableEndpointRateLimiting \u0639\u0644\u0649 false. \u0625\u0630\u0627 \u0644\u0645 \u064a\u0643\u0646 \u0627\u0644\u0623\u0645\u0631 \u0643\u0630\u0644\u0643\u060c \u064a\u0645\u0643\u0646\u0643 \u062a\u062d\u062f\u064a\u062f \u0646\u0642\u0627\u0637 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 <code>{HTTP_VERB}{PATH}<\/code>\u060c \u0628\u0645\u0627 \u0641\u064a \u0630\u0644\u0643 \u0623\u062d\u0631\u0641 \u0627\u0644\u0628\u062f\u0644\u060c \u0644\u0630\u0644\u0643  <code>*:\/api\/values<\/code> \u0633\u0648\u0641 \u064a\u0637\u0627\u0628\u0642 \u062c\u0645\u064a\u0639 \u0637\u0644\u0628\u0627\u062a GET \u0648 POST \u0644\u0640 <code>\/api\/values<\/code>.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":6,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":6,\"nbrPlacementsScanned\":6,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":821} --><br \/>\n<!-- Repeatable debug data: {\"isEarlyInjection\":true,\"currentRuleCount\":900,\"actualCount\":821,\"hasActualCountMetThreshold\":true,\"countRemainingForInjection\":79,\"nextBlockCount\":192,\"hasCountRemainingForInjectionMetThreshold\":true,\"nextCount\":1013} --><\/p>\n<p><!-- Repeatable debug data: {\"injection\":\"before\",\"adPosition\":6,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":6,\"nbrPlacementsScanned\":6,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":true,\"actualCount\":900} --><!-- Zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"after\",\"adPosition\":7,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":7,\"nbrPlacementsScanned\":6,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"isEarlyInjection\":true,\"actualCount\":0} --><\/p>\n<p>\u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0627\u0644\u062a\u0623\u0643\u062f \u0645\u0646 \u0623\u0646 \u0646\u0642\u0637\u0629 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u062a\u0637\u0627\u0628\u0642 \u0645\u0644\u0641\u064b\u0627\u060c \u0648\u0644\u064a\u0633 \u062f\u0644\u064a\u0644\u0627\u064b. \u0641\u064a \u062d\u0627\u0644\u062a\u064a\u060c <code>*:\/download\/*\/*<\/code> \u0643\u0627\u0646\u062a \u0646\u0642\u0637\u0629 \u0646\u0647\u0627\u064a\u0629 \u0635\u0627\u0644\u062d\u0629\u060c \u0648\u0644\u0643\u0646 <code>*:\/download\/*\/*\/<\/code> \u0644\u0645 \u064a\u0643\u0646\u060c \u0628\u0633\u0628\u0628 \u0634\u0631\u0637\u0629 \u0645\u0627\u0626\u0644\u0629 \u0632\u0627\u0626\u062f\u0629.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":7,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":7,\"nbrPlacementsScanned\":7,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":113} --><\/p>\n<div class=\"body-img landscape \">\n<div class=\"responsive-img image-expandable img-article-item\">\n<figure><img data-recalc-dims=\"1\" decoding=\"async\" width=\"400\" height=\"124\" loading=\"lazy\" alt=\"\/wordpress\/wp-content\/uploads\/csit\/2021\/06\/2f948508.png\" data-img-url=\"https:\/\/goodwriterz.com\/site\/wp-content\/uploads\/2024\/11\/1730675791_15_\u0643\u064a\u0641\u064a\u0629-\u062a\u0642\u064a\u064a\u0645-\u0637\u0644\u0628\u0627\u062a-\u0627\u0644\u062d\u062f-\u0641\u064a-BlazorASPNET-Core.png\" src=\"https:\/\/i0.wp.com\/goodwriterz.com\/site\/wp-content\/uploads\/2024\/11\/1730675791_15_%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%82%D9%8A%D9%8A%D9%85-%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%AF-%D9%81%D9%8A-BlazorASPNET-Core.png?resize=400%2C124&#038;ssl=1\" style=\"height:auto;max-width:100%\" title=\"\">  <\/figure>\n<\/p><\/div>\n<\/p><\/div>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":7,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":7,\"nbrPlacementsScanned\":7,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":353} --><\/p>\n<p>\u064a\u062a\u0636\u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0642\u0627\u0626\u0645\u0629 \u0628\u064a\u0636\u0627\u0621 IP \u0644\u0644\u0645\u0636\u064a\u0641 \u0627\u0644\u0645\u062d\u0644\u064a\u060c \u0648\u0627\u0644\u062a\u064a \u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0627\u0644\u062a\u0639\u0644\u064a\u0642 \u0639\u0644\u064a\u0647\u0627 \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u062c\u0631\u064a \u0627\u062e\u062a\u0628\u0627\u0631\u064b\u0627. \u0648\u0644\u0643\u0646\u060c \u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0642\u0627\u062f\u0631\u064b\u0627 \u0639\u0644\u0649 \u0627\u062e\u062a\u0628\u0627\u0631 \u0627\u0644\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u0639\u0646 \u0637\u0631\u064a\u0642 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u062d\u062f \u0627\u0644\u0645\u0646\u062e\u0641\u0636 \u062c\u062f\u064b\u0627\u060c \u0645\u062b\u0644 5 \u0641\u064a \u0627\u0644\u062f\u0642\u064a\u0642\u0629\u060c \u0648\u062a\u0642\u062f\u064a\u0645 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a. \u0645\u0646 \u0627\u0644\u0645\u0641\u062a\u0631\u0636 \u0623\u0646 \u064a\u0638\u0647\u0631 \u0644\u0643 \u0647\u0630\u0627 \u0627\u0644\u062e\u0637\u0623\u060c &#8220;\u062a\u0645 \u062a\u062c\u0627\u0648\u0632 \u062d\u0635\u0629 \u0645\u0643\u0627\u0644\u0645\u0627\u062a \u0648\u0627\u062c\u0647\u0629 \u0628\u0631\u0645\u062c\u0629 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\u0627\u062a&#8221;\u060c \u0645\u0645\u0627 \u064a\u0639\u0646\u064a \u0623\u0646\u0647\u0627 \u062a\u0639\u0645\u0644 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":7,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":7,\"nbrPlacementsScanned\":7,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":693} --><\/p>\n<p>\u0647\u0646\u0627\u0643 \u0627\u0644\u0643\u062b\u064a\u0631 \u0627\u0644\u0630\u064a \u064a\u0645\u0643\u0646 \u0623\u0646 \u062a\u0641\u0639\u0644\u0647 \u0647\u0630\u0647 \u0627\u0644\u062d\u0632\u0645\u0629\u060c \u0644\u0630\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0644\u062f\u064a\u0643 \u0627\u062d\u062a\u064a\u0627\u062c\u0627\u062a \u0623\u0643\u062b\u0631 \u062a\u062d\u062f\u064a\u062f\u064b\u0627 \u0645\u0646 \u0647\u0630\u0647\u060c \u0641\u0625\u0646\u0646\u0627 \u0646\u0648\u0635\u064a \u0628\u0647\u0627 <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/stefanprodan\/AspNetCoreRateLimit\/wiki\/IpRateLimitMiddleware\">\u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0648\u062b\u0627\u0626\u0642\u0647\u0645<\/a> \u0648\u0631\u0624\u064a\u0629 \u0645\u0627 \u0647\u0648 \u0645\u0645\u0643\u0646.<\/p>\n<p><!-- No repeatable ad for zone: character count repeatable. --><!-- Repeatable debug data: {\"injection\":\"none\",\"adPosition\":7,\"startingPoint\":0,\"skipEvery\":null,\"nbrPlacementFilledEachSkip\":7,\"nbrPlacementsScanned\":7,\"ruleCount\":900,\"degradationStartingPoint\":1,\"stopAds\":null,\"actualCount\":857} -->\n <\/div>\n<p>    (\u0639\u0644\u0627\u0645\u0627\u062a \u0644\u0644\u062a\u0631\u062c\u0645\u0629) \u0627\u0644\u0628\u0631\u0645\u062c\u0629 (\u0631) Microsoft<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0631\u0648\u0627\u0628\u0637 \u0633\u0631\u064a\u0639\u0629 \u0625\u0639\u062f\u0627\u062f \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0641\u064a ASP.NET Core \u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062d\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u062f\u0644 \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0646\u0634\u0626 \u0648\u0627\u062c\u0647\u0629 \u0628\u0631\u0645\u062c\u0629 \u062a\u0637\u0628\u064a\u0642\u0627\u062a \u0639\u0627\u0645\u0629 \u0623\u0648 \u0645\u0648\u0642\u0639\u064b\u0627 \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u064b\u0627 \u0639\u0627\u0645\u064b\u0627\u060c \u0641\u0645\u0646 \u0627\u0644\u0645\u062d\u062a\u0645\u0644 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0642\u0644\u0642\u064b\u0627 \u0628\u0634\u0623\u0646 \u0627\u0644\u0623\u062f\u0627\u0621. \u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u0633\u0627\u0639\u062f \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0639\u062f\u0644 \u0641\u064a \u0645\u0646\u0639 \u0625\u0633\u0627\u0621\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u062c\u0645\u0627\u062a DDoS \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629\u060c \u0648\u0645\u0646 \u0627\u0644\u0633\u0647\u0644 \u062c\u062f\u064b\u0627 \u0625\u0639\u062f\u0627\u062f \u062a\u0637\u0628\u064a\u0642\u0627\u062a Blazor\/ASP.NET Core. \u0644\u0645\u0627\u0630\u0627 \u0637\u0644\u0628\u0627\u062a \u062d\u062f \u0627\u0644\u0633\u0639\u0631\u061f \u0647\u0646\u0627\u0643 \u0627\u0644\u0643\u062b\u064a\u0631 &#8230; <a title=\"\u0643\u064a\u0641\u064a\u0629 \u062a\u0642\u064a\u064a\u0645 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u062d\u062f \u0641\u064a Blazor\/ASP.NET Core\" class=\"read-more\" href=\"https:\/\/goodwriterz.com\/site\/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%aa%d9%82%d9%8a%d9%8a%d9%85-%d8%b7%d9%84%d8%a8%d8%a7%d8%aa-%d8%a7%d9%84%d8%ad%d8%af-%d9%81%d9%8a-blazor-asp-net-core\/\" aria-label=\"Read more about \u0643\u064a\u0641\u064a\u0629 \u062a\u0642\u064a\u064a\u0645 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u062d\u062f \u0641\u064a Blazor\/ASP.NET Core\">\u0625\u0642\u0631\u0623 \u0627\u0644\u0645\u0632\u064a\u062f<\/a><\/p>\n","protected":false},"author":1,"featured_media":72001,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[24],"tags":[39,369],"class_list":["post-72000","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft","tag-microsoft","tag-programming"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/goodwriterz.com\/site\/wp-content\/uploads\/2024\/11\/1730675793_%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%82%D9%8A%D9%8A%D9%85-%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%AF-%D9%81%D9%8A-BlazorASPNET-Core.png?fit=700%2C350&ssl=1","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/posts\/72000","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/comments?post=72000"}],"version-history":[{"count":1,"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/posts\/72000\/revisions"}],"predecessor-version":[{"id":72002,"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/posts\/72000\/revisions\/72002"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/media\/72001"}],"wp:attachment":[{"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/media?parent=72000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/categories?post=72000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/goodwriterz.com\/site\/wp-json\/wp\/v2\/tags?post=72000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}