首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义ServiceStack路由中的参数分裂

问自定义ServiceStack路由中的参数分裂
EN

Stack Overflow用户
提问于 2019-02-13 14:16:43
回答 1查看 120关注 0票数 1

我有一个REST端点,它允许客户端获取一个或多个变量的值。我正在使用ServiceStack来实现这一目标。这个问题源于ServiceStack如何解析多个变量。默认行为似乎是拆分“变量”参数字符串(请参阅下面的Request ),它只是在逗号上拆分字符串。问题是,我的一些变量是多维数组,我们允许用户指定该数组的索引,但要做到这一点,用户必须用逗号分隔索引。这意味着ServiceStack将我的一些变量分成两半。

例如,以下是用于此端点的两个可能的urls:

  1. 本地主机:8080/get/t_F1,t_f2
  2. 本地主机:8080/get/t_F1,数组(1,2)

第一个部分适当地划分为:

{"t_f1“、"t_f2"}

第二个分裂为:

{"t_f1“、”数组(1)“、”2“}

但我想把它分割成:

{"t_f1“、”数组(1,2)“}

我试图避免两种可能的解决方案(尽管它们可能是不可避免的):

  1. 处理变量字符串数组(由ServiceStack生成)并修复不正确的拆分。(这对我来说太烦人了)
  2. 更改url端点。例如,用引号修饰参数。(高级用户将通过直接将urls输入浏览器来直接查询此服务,因此我喜欢当前端点结构的简单性)

我的理想解决方案是以某种方式定制ServiceStack如何直接拆分这些参数。不过,我在ServiceStack的文档中找不到解决方案(公平地说,我可能遗漏了一些东西,或者误解了如何应用urlfilter之类的东西)。

有什么想法吗?

代码语言:javascript
复制
[Route("/get/{Variables}"]
public class VariableRequest{
    public string[] Variables {get; set;}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-13 19:14:57

如果您需要自定义路由解析,则需要自己使用通配符路径来完成它,例如:

代码语言:javascript
复制
[Route("/get/{Variables*}"]
public class VariableRequest
{
    public string Variables {get; set;}
}

然后,在您的请求中,您可以自己解析原始request.Variables字符串。

尽管我避免在/path/info中包含任何复杂的类型,而是通过QueryString传递它们。因此,在本例中,我将从路由/path/info中删除Variables:

代码语言:javascript
复制
[Route("/get"]
public class VariableRequest
{
    public string Variables {get; set;}
}

这将允许您使用/get?Variables=....调用您的服务。

IMO /get对于一个休息的端点来说不是一个很好的选择,我个人认为这个路线是这样的:

代码语言:javascript
复制
[Route("/vars"]
public class GetVariables : IReturn<GetVariablesResponse>
{
    public string Symbols { get; set; }
}

因此,可以使用/vars?symbols=...调用服务。有关设计API的更多信息,请参见:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54672313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档