Ich muss die eingehende Anfrage für eine Übereinstimmung mit dem regulären Ausdruck überprüfen. Wenn es zusammenfällt, dann benutze diese Route. Zu diesem Zweck Einschränkung. Aber mein Beispiel will nicht funktionieren. RouteBuilder benötigt einen Handler beim Deklarieren. Und der Handler fängt alle Anfragen ab und verursacht keine Einschränkungen.ASP.NET Core, wie überprüft man die Anfrage für eine Übereinstimmung mit einem regulären Ausdruck?
Bitte sagen Sie mir, wie Sie die eingehende Anfrage für eine Übereinstimmung mit einem regulären Ausdruck korrekt überprüfen?
configure
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
var trackPackageRouteHandler = new RouteHandler(Handle);
var routeBuilder = new RouteBuilder(app);
routeBuilder.MapRoute(
name: "old-navigation",
template: "{*url}",
defaults: new { controller = "Home", action = "PostPage" },
constraints: new StaticPageConstraint(),
dataTokens: new { url = "^.{0,}[0-9]-.{0,}html$" });
routeBuilder.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
app.UseRouter(routeBuilder.Build());
app.UseMvc();
}
// собственно обработчик маршрута
private async Task Handle(HttpContext context)
{
await context.Response.WriteAsync("Hello ASP.NET Core!");
}
IRouteConstraint
public class StaticPageConstraint : IRouteConstraint
{
public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
string url = httpContext.Request.Path.Value;
if(Regex.IsMatch(url, @"^.{0,}[0-9]-.{0,}html$"))
{
return true;
} else
{
return false;
}
throw new NotImplementedException();
}
}
Die Regex vereinfacht werden kann: @ ".^{0,} [0-9] - {0,} html $" -> @ ".^* \ D - * html $" Sehen die URLs wirklich so aus? example9-whatever.html . * entspricht einem beliebigen Zeichen (mit Ausnahme von Zeilenabschlüssen) zwischen null und unbegrenzten Zeiten \ d entspricht einer einzelnen Ziffer (entspricht [0-9]) - entspricht dem Zeichen - wörtlich Zeichen (außer Zeilenabschluss) zwischen null und unbegrenzten Zeiten html entspricht den Zeichen html wörtlich (Groß-/Kleinschreibung beachten) $ aktiviert Position am Ende der Zeichenfolge oder vor dem Zeilenabschluss rechts am Ende der Zeichenfolge (falls vorhanden) – wp78de