ServiceStack.Net的多个可选参数

本文关键字:参数 Net ServiceStack | 更新日期: 2023-09-27 18:11:26

我正在尝试使用ServiceStack实现具有多个可选参数的服务。净

目前我的路线是这样的

Routes.Add<SaveWeek>("/save/{Year}/{Week}");

我想支持这样的uri:

/保存/2010/12//4周一/周二/周三6//7

即星期一=4,星期二=6,星期三=7

然而,我想要忽略天数的能力,即调用服务的人可以决定他们是否要保存每天的每个值…

。像这样缺少参数值

? = 4,周一周三= 7,周五= 6

当然,一种解决方案是使用以下路由,当我不想保存值时,只传递0。

Routes.Add<SaveWeek>("/save/{Year}/{Week}/{Monday}/{Tuesday}}/{Weds}/{Thurs}/{Fri}/{Sat}/{Sun}");

但是…有没有更好的方法来实现这个功能?

ServiceStack.Net的多个可选参数

当你的Route需求开始变得太复杂时,添加一个通配符路径最终会变得更容易,这样你就可以自己解析剩下的查询字符串了。也就是说,在这种情况下,由于querystring的第一部分保持不变,你可以添加一个通配符映射来存储querystring的可变部分,即:

Routes.Add("/save/{Year}/{Week}/{DaysString*}");

ServiceStack仍然会用YearWeek字段填充部分DTO(以及在querystring中传递的任何字段)。url的其余可变部分存储在DaysString中,然后您可以自由地手动解析它。因此,上面的映射将能够匹配如下url:

/保存/2010/12//4周一/周二/6 ?周三= 7

并在请求DTO中填充以下变量:

    : 2010年
  • 周:12
  • 周三:
  • 7
  • DaysString: Monday/4/Tuesday/6