dotnet/aspnetcore

Perf: add API to avoid regex matching rewrite rules unless necessary

Open

#5.984 geöffnet am 30. Aug. 2016

Auf GitHub ansehen
 (4 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)C# (10.653 Forks)batch import
api-suggestionarea-middlewareenhancementfeature-rewrite-middlewarehelp wanted

Repository-Metriken

Stars
 (37.933 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 16T 9h) (258 gemergte PRs in 30 T)

Beschreibung

Regex is an expensive part of the rewrite middleware a lot in order to do pattern matching. It is common for rewrite patterns to be led by a static prefix.

Example: "blogs/(.*)" => "api/blogs?id=$1"

For this rule, the middleware can avoid unnecessary regex allocations by only running the rule when the path begins with "/blogs/".

Possible API design:

RewriteOptions.AddRewrite(string prefix, string pattern, string urlResult) // prefix is static, doesn't container rules. If uri doesn't start with the prefix, skip this rule
RewriteOptions.Ignore(string prefix); // always skip rule processing for urls beginning with this prefix

Usage

RewriteOptions.AddRewrite(prefix: "/blogs/", pattern: "(.*)", urlResult: "/api/blogs?id=$1")
RewriteOptions.Ignore("/images/")

Contributor Guide