0

Я пишу клиентскую оболочку над API RESTful, которая может принимать более одного значения для аргумента.ServiceStack Client несколько аргументов GET (не разделены запятыми)

Возьмем для примера конечной

/rest/bug?product=Foo&product=Bar 

Мой класс для этого

public class SearchBugRequest : IReturn<BugResponse> 
{ 
    [DataMember(Name = "product")] 
    public string[] Product { get; set; } 
} 

Когда я использую ToUri это показывает, что ServiceStack строит URI, как

/rest/bug?product=Foo%2CBar%2CBlah 

ServiceStack в конечном итоге создает URL-адрес, разделенный запятой, и URL-адрес enc oded

Как заставить ServiceStack создать URL-адрес, который ожидает служба?

ответ

2

Вы должны использовать только ServiceStack's Typed Clients поговорить с ServiceStack Услуги не внешняя третья партия REST API, как они в первую очередь предназначены для создания HTTP-запросов, которые изначально понимаемые ServiceStack Services.

Если вы хотите потреблять сторонние услуги, рекомендуется использовать вместо этого более flexible and customizable HTTP Utils API's.

Сказав, что вы можете настроить сгенерированный Url для создания URL вы хотите using an IUrlFilter что-то вроде:

public class SearchBugRequest : IReturn<BugResponse>, IUrlFilter 
{ 
    [IgnoreDataMember] 
    public string[] Product { get; set; } 

    public string ToUrl(string absoluteUrl) 
    { 
     Product.Each(p => absoluteUrl = absoluteUrl.AddQueryParam("product",p)); 
     return absoluteUrl; 
    } 
}