2015-06-30 46 views
0

我已經版本的DTO(或好或壞)像這樣:ServiceStack .NET客戶端 - 如何使用要求的DTO有多種途徑

[Route("/v1/login", Verbs = "POST")] 
[Route("/v2/login", Verbs = "POST")]   
[DataContract] 
public class Login : IReturn<LoginResponse> 
{ 
    [DataMember(IsRequired = true)] 
    public string Username { get; set; } 

    [DataMember(IsRequired = true)] 
    public string Password { get; set; } 

    [DataMember(IsRequired = false)] 
    public string Key{ get; set; }//added for v2 
} 

我的問題是,通過.NET客戶端消耗的API時,我似乎無法弄清楚如何指定使用哪個版本的路由(除了在初始化jsonclient時修改基礎URL,這在我們所有的用例中都不起作用)。就好像DTO默認爲1路線一樣,即使有更多的路線選項可用。

除了在帖子中手動指定「v2」路由之外,是否有更好的方法來完成此默認路由行爲?

回答

0

的路線不明確,不能推斷,所以你需要在它傳遞的調用點,例如:

var response = client.Post<LoginResponse>("/v2/login", new Login { .. }) 

基於消息的設計借給自己設計和前後兼容的DTO,不需要版本控制,但是如果您必須檢查ServiceStack的recommended versioning strategy版本。

+0

強制客戶端在每個高於V1的調用中手動指定路由看起來像是一個浪費的機會,尤其是當所有關聯路由信息綁定到該DTO(僅缺少版本信息)時。 如果我得到時間,我將嘗試構建一種基於指定版本從DTO中提取正確路由的方法,並在此處發佈示例。 我知道版本控制是相對的,所以將其構建到SS客戶端框架中可能沒有意義 - 但它似乎對我們的實現(至少一些)有意義。 感謝您的回答! – jglassco

+0

@jglassco right,但這不是建議的版本控制策略,[this is](http://stackoverflow.com/a/12413091/85785)它不需要顯式支持,因爲該版本自然地填充在構造器中。添加ServiceStack參考還支持在生成的DTO中添加[隱式版本號](https://github.com/ServiceStack/ServiceStack/wiki/CSharp-Add-ServiceStack-Reference#addimplicitversion)。 – mythz

相關問題