簡體   English   中英

在ServiceStack中使用正則表達式進行路由

[英]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}" ,此示例將按預期工作,大概是因為沒有通配符的路由具有優先權,但是我需要這樣以通配符結尾的路由將具有任何實際用途。

此問題是由於未針對通配符路由驗證匹配規則而導致的,現在可以通過此提交解決匹配,在此提交中 ,您的示例將按預期從MyGet上可用的 ServiceStack v5.0.3中正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM