我有一个REST端点,它允许客户端获取一个或多个变量的值。我正在使用ServiceStack来实现这一目标。这个问题源于ServiceStack如何解析多个变量。默认行为似乎是拆分“变量”参数字符串(请参阅下面的Request ),它只是在逗号上拆分字符串。问题是,我的一些变量是多维数组,我们允许用户指定该数组的索引,但要做到这一点,用户必须用逗号分隔索引。这意味着ServiceStack将我的一些变量分成两半。
例如,以下是用于此端点的两个可能的urls:
第一个部分适当地划分为:
{"t_f1“、"t_f2"}
第二个分裂为:
{"t_f1“、”数组(1)“、”2“}
但我想把它分割成:
{"t_f1“、”数组(1,2)“}
我试图避免两种可能的解决方案(尽管它们可能是不可避免的):
我的理想解决方案是以某种方式定制ServiceStack如何直接拆分这些参数。不过,我在ServiceStack的文档中找不到解决方案(公平地说,我可能遗漏了一些东西,或者误解了如何应用urlfilter之类的东西)。
有什么想法吗?
[Route("/get/{Variables}"]
public class VariableRequest{
public string[] Variables {get; set;}
}发布于 2019-02-13 19:14:57
如果您需要自定义路由解析,则需要自己使用通配符路径来完成它,例如:
[Route("/get/{Variables*}"]
public class VariableRequest
{
public string Variables {get; set;}
}然后,在您的请求中,您可以自己解析原始request.Variables字符串。
尽管我避免在/path/info中包含任何复杂的类型,而是通过QueryString传递它们。因此,在本例中,我将从路由/path/info中删除Variables:
[Route("/get"]
public class VariableRequest
{
public string Variables {get; set;}
}这将允许您使用/get?Variables=....调用您的服务。
IMO /get对于一个休息的端点来说不是一个很好的选择,我个人认为这个路线是这样的:
[Route("/vars"]
public class GetVariables : IReturn<GetVariablesResponse>
{
public string Symbols { get; set; }
}因此,可以使用/vars?symbols=...调用服务。有关设计API的更多信息,请参见:
https://stackoverflow.com/questions/54672313
复制相似问题