{"adoption": {"forks": 442, "observed_at": "2026-08-28T04:07:47.522025+00:00", "stars": 3172}, "canonical_url": "https://ross.abutalabs.com/products/aspnetcoreratelimit", "card": {"archived": false, "artifact_type": "library", "description": "ASP.NET Core rate limiting middleware", "domain": ["web-development", "backend", "apis", "security"], "enriched": true, "function": ["rate-limiting", "middleware", "web-framework"], "health_score": 20, "homepage": null, "language": "C#", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["stefanprodan/AspNetCoreRateLimit"], "name": "stefanprodan/AspNetCoreRateLimit", "platform": ["dotnet", "cross-platform"], "pushed_at": "2024-07-26T11:58:58+00:00", "repo": "stefanprodan/AspNetCoreRateLimit", "stars": 3172, "tags": ["asp-net-core", "nuget", "api-throttling", "ip-rate-limiting", "client-rate-limiting", "web-server"], "topics": ["rate-limiting", "asp-net-core", "middleware"], "urls": [], "use_cases": ["throttle requests to an ASP.NET Core Web API by IP address", "limit API calls per client ID or API key", "apply different rate limits per endpoint or HTTP verb", "prevent API abuse and brute-force attacks on MVC apps", "update rate limit rules at runtime without redeploying", "distribute rate limit counters across servers with Redis"], "what_it_is": "AspNetCoreRateLimit is an ASP.NET Core rate limiting middleware library for controlling how many requests clients can make to a Web API or MVC app. It supports IP-based and client-ID-based limits with per-URL and per-HTTP-verb scoping, configurable intervals, and runtime rule updates.", "when_to_avoid": ["you are on .NET 7+ and only need basic rate limiting, since built-in middleware now exists", "your stack is not ASP.NET Core", "you need advanced distributed rate limiting beyond the Redis package's capabilities"], "when_to_choose": ["you run an ASP.NET Core API and need fine-grained IP or client-based throttling", "you want configurable, runtime-updatable rate limit rules", "you need per-endpoint or per-verb quota scoping"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/aspnetcoreratelimit", "repo": "stefanprodan/AspNetCoreRateLimit", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:47.522025+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:45:28.426022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "929c0dbc859d5f6697a23297ce5931cdcca63b40c13083815b5216325be4ea1d", "fetched_at": "2026-08-28T04:07:47.522025+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stefanprodan/AspNetCoreRateLimit"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3696, "days_push": 768, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}