ServiceStack .net 客户端 - 如何使用具有多个路由的请求 DTO

ServiceStack .net client - how to use request DTOs with multiple routes

我像这样对 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 时,我似乎无法弄清楚如何指定要使用的路由版本(除了修改基础 url 时初始化 jsonclient,这在我们所有的用例中都不起作用)。就好像 DTO 默认为 1 条路线,即使有更多路线选项可用。

除了在 post 期间手动指定 "v2" 路由之外,是否有更好的方法来完成此默认路由行为?

路由不明确且无法推断,因此您需要在调用站点传递它,例如:

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

基于消息的设计有助于设计不需要版本控制的向后和向前兼容的 DTO,但如果您必须进行版本控制,请查看 ServiceStack 的 recommended versioning strategy