2015-06-30 2 views
0

я версированы DTOs (лучше или хуже), как это:ServiceStack клиент .net - как использовать запрос DTOs с несколькими маршрутами

[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 клиента, я возможно, не выясняют, как указать, какую версию маршрута использовать (кроме изменения базового url при инициализации jsonclient, который не работает во всех наших случаях использования). Как будто DTO по умолчанию имеет 1 маршрут, даже если доступно больше параметров маршрута.

За исключением того, что вручную указывается маршрут «v2» во время сообщения, существует ли лучший способ выполнить это поведение по умолчанию по умолчанию?

ответ

0

Маршруты неоднозначны и не могут быть установлены, так что вы должны будете передать его в на вызывной-сайте, например:

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

сообщений на основе конструкции поддаются разработке и назад и вперед совместимые DTO, которые не требуют управления версиями, но если вы должны проверить версию ServiceStack's recommended versioning strategy.

+0

Задание клиенту указания маршрута вручную при каждом вызове выше V1 кажется пустым, особенно когда вся связанная информация маршрутизации привязана к этому DTO (только отсутствующая информация о версии). Если я получу время, я попытаюсь построить метод извлечения правильного маршрута из DTO на основе указанной версии и отправьте пример здесь. Я понимаю, что управление версиями является относительным, поэтому может не иметь смысла строить это в платформе клиента SS, но, похоже, имеет смысл (по крайней мере, некоторые) наших реализаций. Спасибо за ответ! – jglassco

+0

@jglassco справа, но это не рекомендуемая стратегия управления версиями, [это] (http://stackoverflow.com/a/12413091/85785), которая не требует явной поддержки, поскольку версия, естественно, заполняется в конструкторе , Добавить ServiceStack Reference также поддерживает добавление [неявного номера версии в Generated DTO's] (https://github.com/ServiceStack/ServiceStack/wiki/CSharp-Add-ServiceStack-Reference#addimplicitversion). – mythz

Смежные вопросы