我有一个REST端点,该端点使客户端可以获取一个或多个变量的值。我正在使用ServiceStack来实现这一目标。问题是由ServiceStack如何解析多个变量引起的。似乎默认行为是拆分“ Variables”参数字符串(请参见下面的“请求DTO VariableRequest”),它只是将字符串拆分为逗号。问题是我的一些变量是多维数组,我们允许用户指定该数组的索引,但要这样做,用户必须用逗号分隔索引。这意味着ServiceStack将我的一些变量分成两半。
例如,以下是此端点的两个可能的URL:
第一个适当地拆分为:
{“ t_f1”,“ t_f2”}
第二个拆分为:
{“ t_f1”,“ array(1”,“ 2)”}
但我希望将其拆分为:
{“ t_f1”,“ array(1,2)”}
我正在尝试避免两种可能的解决方案(尽管它们可能不可避免):
我的理想解决方案是以某种方式自定义ServiceStack如何直接拆分这些参数。不过,我在ServiceStack的文档中找不到解决方案(为了公平起见,我可能会遗漏某些东西或误解了如何应用urlfilters之类的东西)。
有什么想法吗?
[Route("/get/{Variables}"]
public class VariableRequest{
public string[] Variables {get; set;}
}
答案 0 :(得分:0)
如果您需要custom route parsing,则需要自己使用Wildcard path进行操作,例如:
[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
对于具有REST功能的终结点来说不是一个很好的选择,我个人会这样定义该路由:
[Route("/vars"]
public class GetVariables : IReturn<GetVariablesResponse>
{
public string Symbols { get; set; }
}
因此可以使用/vars?symbols=...
来调用服务。有关设计API的更多信息,请参见: