传递DTO中未包含的其他参数

时间:2013-11-08 15:25:50

标签: c# asp.net-mvc-3 servicestack asp.net-web-api-routing

我有这样的REST ServiceStack Route.Add声明 Routes.Add<MyDTOObject>(/servicename/{property1fromDTO});但我需要传递一个未在MyDTOObject类声明中定义的额外String值。

是否可以传递这样的内容Routes.Add<MyDTOObject>(/servicename/{property1fromDTO}/{additionalString});
并在我的OnGet(MyDTOObject request){...}方法实施中检索它?

目前我只能从request获取MyDTOObject类声明中定义的属性,这些属性是由Routes.Add使用的注释所指定的。

在我的服务代码上,我有这个:
public override object OnGet(MyDTOObject request) {
{1}}
{ ...
request.property1fromDTO //get value
但我不能这样做:
...}
因为Visual Studio不将其识别为request.additionalString //get the value

类型的属性

帮助将不胜感激,因为我对ServiceStack和RESTful服务还不熟悉。谢谢!

1 个答案:

答案 0 :(得分:0)

不完全确定您要实现的目标,但可以使用wildcard at the end to absorb multiple paths,例如:

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

将填充已知变量并将其余变量保留在DayString中,以便您手动解析。请参阅this answer for more details

您可以使用{ignore}关键字忽略其他路径,例如:

Routes.Add<MyDto>(/servicename/{property1fromDTO}/{ignore});

您还可以使用base.Request对服务内部的请求进行完全访问,例如:

base.Request.QueryString["param"];
base.Request.PathInfo
base.Request.RawUrl

*注意:看起来您正在使用旧的API(即 OnGet )。我建议继承Service,以便您可以使用New API,因为在下一个ServiceStack v4中删除了旧API。*