namespace NoticeBoard.Routing; public class DeviceSlugConstraint : IRouteConstraint { private static readonly HashSet ReservedPaths = new(StringComparer.OrdinalIgnoreCase) { "admin", "api", "account", "d", "error", "css", "js", "lib", "uploads", "favicon.ico" }; public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) { if (values.TryGetValue(routeKey, out var value) && value is string slug) { if (ReservedPaths.Contains(slug)) return false; return slug.All(c => char.IsLetterOrDigit(c) || c == '-'); } return false; } }