ExpressJs允许您匹配条件(也称为动态或模糊)路线匹配。像GET '/people(/sex/:sexFilter)?(/age-over/:ageOverFilter)?'
符合以下示例:
/people
/people/sex/female
/people/sex/female/age-over/30
(最重要的是)/people/age-over/30
我想知道是否有一种配置ServiceStack(对于C#Xamarin应用程序)客户端的方法,如果请求dto对象属性保留为null
,则会生成以下路由:< / p>
HttpService.Instance.Get<Person[]>(new SearchPeopleRoute() { sexFilter = "female" });
// Generates /people/sex/female
HttpService.Instance.Get<Person[]>(new SearchPeopleRoute() { ageOverFilter = 30 });
// Generates /people/age-over/30
解决方案需要可扩展到许多搜索过滤器,因此对于过滤器的每个排列都具有[Route(...)]
属性是不可维护的。
我不知道在通话之前是否有办法在运行时生成路线,但这很棒。
答案 0 :(得分:1)
在ServiceStack中,您需要列出您希望能够使用该服务调用的不同路由,例如:
[Route("/people")]
[Route("/people/sex/{Sex}")]
[Route("/people/sex/{Sex}/age-over/{AgeOver}")]
public class SearchPeopleRoute
{
public string Sex { get; set; }
public int? AgeOver { get; set; }
}
然后,C#/。NET服务客户端根据填充请求DTO的内容选择最合适的路由。
对于ServiceStack中的查询,我们鼓励您使用?queryString
来应用任何更适合设计HTTP API的过滤器,因为/path/info
用于标识资源{{1} }用于将修饰符应用于该资源请求。
此约定为embraced in AutoQuery,允许您定义请求DTO,如:
?queryString
无需实现实现,您可以查询implicit conventions [Route("/people")]
public class SearchPeople : QueryDb<Person> {}
表上的任何字段,其中上述AutoQuery请求DTO自动支持以下查询:
Person