Передача дополнительного параметра, не содержащегося в DTO

У меня есть объявление REST ServiceStack Route.Add, подобное этому Routes.Add<MyDTOObject>(/servicename/{property1fromDTO});, но мне нужно передать дополнительное строковое значение, которое не определено в объявлении класса MyDTOObject.

Можно ли передать что-то вроде этого
Routes.Add<MyDTOObject>(/servicename/{property1fromDTO}/{additionalString});
и получить его в моей реализации метода OnGet(MyDTOObject request){...}?

В настоящее время я могу получить значения из request только для атрибутов, определенных в объявлении класса MyDTOObject, как указано в аннотации, используемой для Routes.Add.

В моем коде службы у меня есть это:
public override object OnGet(MyDTOObject request)
{ ...
request.property1fromDTO //get value
...}
но я не могу сделать это:
request.additionalString //get the value
потому что Visual Studio не распознает его как свойство типа MyDTOObject

Помощь будет оценена по достоинству, так как я новичок в службах ServiceStack и RESTful. Спасибо!


person JESTech    schedule 08.11.2013    source источник


Ответы (1)


Не совсем уверен, чего вы пытаетесь достичь, но вы можете использовать шаблон в конце, чтобы использовать несколько путей, например:

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

Который заполнит известные переменные и оставит остальные в DayString, чтобы вы могли проанализировать их вручную. См. этот ответ для более подробной информации.

Вы можете игнорировать дополнительный путь с ключевым словом {ignore}, например:

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

У вас также есть полный доступ к запросу внутри службы с помощью base.Request, например:

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

*Примечание: похоже, вы используете старый API (например, OnGet). Я рекомендую наследовать от Service, чтобы вы могли использовать Новый API в качестве старого API. был удален в следующей версии 4 ServiceStack.*

person mythz    schedule 08.11.2013
comment
@DevJE, если он не введен, его нет в DTO - используйте base.Request для доступа к дополнительным свойствам базового запроса (как показано в моем ответе). Примечание: вы используете Old API, если вы новичок, вам следует использовать ссылку Новый API, так как старый API был удален в v4. - person mythz; 08.11.2013
comment
Это проект, созданный кем-то другим; не было моим решением. - person JESTech; 08.11.2013