Je dois vérifier la requête entrante pour une correspondance avec l'expression régulière. Si cela coïncide, utilisez cette route. À cette fin Contrainte. Mais mon exemple ne veut pas travailler. RouteBuilder requiert un gestionnaire lors de la déclaration. Et le gestionnaire intercepte toutes les demandes et ne provoque pas de contraintes.ASP.NET Core, comment vérifier la requête pour une correspondance avec une expression régulière?
S'il vous plaît dites-moi comment vérifier correctement la demande entrante pour une correspondance avec une expression régulière?
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();
}
}
Le regex peut être simplifié: @ ".^{0,} [0-9] - {0,} $ html" -> @ ".^* \ D - * $ html" Est-ce vraiment la façon dont les URL ressemblent? exemple9-quel.html . * correspond à n'importe quel caractère (sauf pour les terminaisons de ligne) entre 0 et \ d correspond à un seul chiffre (égal à [0-9]) - correspond au caractère - littéralement . html correspond littéralement aux caractères html (sensible à la casse) $ assert la position à la fin de la chaîne, ou avant la fin de la ligne juste à la fin de la chaîne (le cas échéant) – wp78de