将路由模板转换为正则表达式

Convert Route Templates into Regex

我有一个包含约 300 项服务的应用程序。我想为特定子路径添加授权。 我创建了一个自定义授权属性来验证路由。我想将路由模板转换为正则表达式,这样我可以确保将来的任何更改都会自动应用回授权属性。

例如我有一条路线。

var benefitRoute =  "/employees/{employeeId:Guid}/benefit/{benefitId:guid}/enrollments";

我想用 .*

替换所有 {} 及其内容
"/employees/.*/benefit/.*/enrollments";

但是我尝试在 \{.+\} 上进行匹配,但是当我 运行 我的正则表达式时,它会在两个较小的之前抓住较大的。

Regex.Replace(route, "\{.+\}", ".*");

如何将路由模板转换为正则表达式。

您应该添加“?”这使得量词 "lazy",尝试

        var benefitRoute =  "/employees/{employeeId:Guid}/benefit/{benefitId:guid}/enrollments";
        string pattern = @"{(.*?)}";
        String result=Regex.Replace(benefitRoute, pattern, ".*");

您可以在此处找到更多信息 http://www.regular-expressions.info/repeat.html