2015-06-27 2 views
0

У меня есть класс DTO с булевым полем IsLocked.Форсирование свойств DTO по пути в ServiceStack

Легко построить маршрут, как

/.../{IsLocked}
, и он присвоит этому полю значение запроса.

Но мне нужно что-то наподобие

/.../lock 
/.../unlock
, и это означает, что поле IsLocked принудительно присвоено true или false в зависимости от маршрута.

Могу ли я сделать это без CustomRequestBinder и без разбора Request.RawUrl?

Заранее благодарим за помощь.

ответ

2

Это выглядит как 2 различных операции, так что я хотел бы посмотреть на декларирование 2 операции, например:

[Route("/files/{FileName}/lock")] 
public class LockFile { ... } 

[Route("/files/{FileName}/unlock")] 
public class UnlockFile { ... } 

В противном случае вы можете объявить маршруты, как обычно и возвращает вычисленное логическое свойство сравнения строки, например:

[Route("/files/{FileName}/{LockString}")] 
public class LockOrUnlockFile 
{ 
    public string FileName { get; set; } 
    public string LockString { get; set; } 
    public bool IsLocked { get { return LockString == "lock"; } } 
} 
+0

Благодарим за быстрый ответ. Он реализован как одна операция ChangeLockedState (bool locked), но клиент хочет иметь два разных пути в API, таких как блокировка и разблокировка. И это также полезно для другого метода, который принимает статус параметра перечисления, и клиент хочет, чтобы один путь вводил значение перечисления (/.../{Status}) и совершенно другой путь к определению фиксированного значения перечисления (что-то вроде /.../newfiles , а DTO не содержит этого поля). Второй способ - это решение, но есть ли другой способ? –

+0

Существует перегруженный метод Routes.Add в AppHost, который принимает параметр propertyExpressions. Думаю, это может помочь, но я не понимаю, как это работает, и я не нашел никакой информации об этом. Также возможно помочь мне ключевое слово {ignore}, но на эту тему также очень мало информации. –

+0

@VladimirShiyanov '{ignore}' просто соответствует пустому заполнителю, см. Документы в [сопоставлении игнорируемых путей] (https://github.com/ServiceStack/ServiceStack/wiki/Routing#matching-ignored-paths). Вот пример использования свойствExpressions (https://github.com/ServiceStack/ServiceStack/blob/cb4eb92a9029b841e352fbd1c5d97ec75939b488/tests/ServiceStack.ServiceHost.Tests/Routes/ServiceRoutesTests.cs#L104), то есть он предоставляет только способ использования выражение типизированного свойства для сопоставления имен свойств. – mythz

Смежные вопросы