[英]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.