[英]Routing with regular expressions in ServiceStack
我正在尝试使用ServiceStack构建小型.NET Core服务器,并希望使用正则表达式进行路由。 到目前为止,我基本上只是创建了一个Hello World项目并将其连接到数据库。
我的ServiceModel项目中有以下类:
[Route("/hello/{Language}/{Name*}", Matches = @"PathInfo =~ \/hello\/[a-z]{2}\/[A-Za-z]+$")]
public class HelloTo : IReturn<HelloResponse> {
public string Language { get; set; }
public string Name { get; set; }
}
[Route("/hello/{Language*}", Matches = @"PathInfo =~ \/hello\/[a-z]{2}$")]
public class Hello : IReturn<HelloResponse> {
public string Language { get; set; }
}
public class HelloResponse {
public string Result { get; set; }
}
这在我的ServiceInterface项目中:
public HelloResponse Any(HelloTo request) {
var greeting = Db.SingleById<Greeting>(request.Language);
return new HelloResponse { Result = $"{greeting.Text}, {request.Name}!" };
}
public HelloResponse Any(Hello request) {
var greeting = Db.SingleById<Greeting>(request.Language);
return new HelloResponse { Result = $"{greeting.Text}, you!" };
}
关键是,当我发送以下请求时: http://localhost/hello/fr
,即使其中没有名称 ,它也会转到第一个路由。
据我所知,此配置无法使用第二条路由。 经过一些试验,在我看来好像完全忽略了Matches参数,这使我认为也许我需要启用某些功能。 但是,除了这里的简短说明,使用regexps进行路由应该有点像这样,我找不到很多文档。
请注意,如果我将第二条路由从Route("/hello/{Language*}"
更改为Route("/hello/{Language}"
,此示例将按预期工作,大概是因为没有通配符的路由具有优先权,但是我需要这样以通配符结尾的路由将具有任何实际用途。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.