ServiceStack.Net的多个可选参数

时间:2011-10-15 19:36:41

标签: c# asp.net servicestack

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

目前我的路线看起来像这样

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

我想支持这样的uris:

  

/保存/ 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}");

但.....是否有更好的方法来实现此功能?

1 个答案:

答案 0 :(得分:27)

当你的Route需求开始变得太复杂时,最终只需添加一个通配符路径就可以了,这样你就可以自己解析其余的查询字符串了。即在这种情况下,因为查询字符串的第一部分保持不变,你可以添加一个通配符映射来存储查询字符串的可变部分,即:

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

ServiceStack仍将使用字段(以及在查询字符串中传递的任何字段)填充部分DTO。 url的其余可变部分存储在 DaysString 中,然后您可以自由地手动解析。所以上面的映射将能够匹配网址:

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

并在Request DTO中填充以下变量:

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