14

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

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

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

我想像这样支持uris:

/save/2010/12/Monday/4/Tuesday/6/Wednesday/7

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

但是我希望能够忽略天数,即调用服务的人可以决定他们是否要为每一天保存每个值......

即像这样缺少参数值

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

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

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

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

4

1 回答 1

28

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

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

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

/save/2010/12/Monday/4/Tuesday/6?Wednesday=7

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

  • 年份:2010
  • 周:12
  • 星期三:7
  • DaysString:星期一/4/星期二/6
于 2011-10-15T22:38:38.753 回答