dotnet/aspnetcore

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

Open

#5 984 ouverte le 30 août 2016

Voir sur GitHub
 (4 commentaires) (0 réactions) (0 assignés)C# (10 653 forks)batch import
api-suggestionarea-middlewareenhancementfeature-rewrite-middlewarehelp wanted

Métriques du dépôt

Stars
 (37 933 stars)
Métriques de merge PR
 (Merge moyen 16j 9h) (258 PRs mergées en 30 j)

Description

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/")

Guide contributeur