servicestack,Routing,servicestack" /> servicestack,Routing,servicestack" />

Routing 沿ServiceStack中的路径强制DTO属性

Routing 沿ServiceStack中的路径强制DTO属性,routing,servicestack,Routing,servicestack,我有一些DTO类,布尔字段被锁定 很容易构建像/../{IsLocked}这样的路由 /.../{IsLocked} 并将此字段指定给查询值 但我需要像/../lock这样的东西 /.../lock /.../unlock /…/解锁 也就是说,根据路径,强制将IsLocked字段赋值为true或false 在没有CustomRequestBinder和解析Request.RawUrl的情况下,我可以这样做吗 提前感谢您的帮助。这看起来像是两个不同的操作,因此我将考虑声明两个操作,例如: [Ro

我有一些DTO类,布尔字段被锁定

很容易构建像/../{IsLocked}这样的路由 /.../{IsLocked} 并将此字段指定给查询值

但我需要像/../lock这样的东西 /.../lock /.../unlock /…/解锁 也就是说,根据路径,强制将IsLocked字段赋值为true或false

在没有CustomRequestBinder和解析Request.RawUrl的情况下,我可以这样做吗


提前感谢您的帮助。

这看起来像是两个不同的操作,因此我将考虑声明两个操作,例如:

[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"; } }
}

谢谢你的快速回复。它实现为一个操作ChangeLockedState(boolLocked),但客户希望API中有两个不同的路径,如锁定和解锁。它对于另一种方法也很有用,该方法采用枚举参数状态,客户希望有一条路径输入枚举值(/…/{status}),而另一条路径分配固定枚举值(类似于/../newfiles,DTO不包含该字段)。第二种方法是这个决定,但是还有其他方法吗?有重载的方法Routes.Add-in AppHost,它接受propertyExpressions参数。我想这可能会有帮助,但我不明白它是如何工作的,我也没有找到关于它的信息。也可以帮助我{ignore}关键字,但关于这个主题的信息也很少。@VladimirShiyanov
{ignore}
只是匹配了一个空占位符,请参阅中的文档。下面是一个示例,即它只提供了一种使用类型化属性表达式映射到属性名称的方法。 /.../lock /.../unlock