在我相当有限的 OpenRasta 经验中,您可以使用 .And 方法添加额外的 .AtUri 资源位置。
即在你的情况下
ResourceSpace.Has
.ResourcesOfType<Request>()
.AtUri("/processing").And.AtUri("/processing/{processid}")
.HandledBy<SomeHandler>()
.TranscodedBy<SomeCodec>();
其中 {curley 括号} 指定 Handler 方法的输入参数,即:
public class SomeHandler
{
public Request Get(int processid = 0) //specify a default value for the uri case /processed
{
if (processid == 0)
return Context.Set<Request>().ToList(); //Context comes from my DbContext derived class which is part of my entity model.
else
return GetRequestFromProcessId(processid) //this is a private method in your handler class using Linq to SQL to retreive the data your interested in. I can't see your handler so I'm making it up.
}
}
我在 OpenRasta 文档中发现了一个注释,它指定你必须为每个匹配的类型和处理程序有明确的(只有一个)资源空间定义。换句话说,您不能将相同的 ResourceOfType 类与相同的 HandledBy 处理程序类重复。我对此进行了测试,事实就是如此,也许您首先要问这个问题。
注意,这段代码完全未经测试,我刚刚采用了我在你的类和已知的 uri 中编写和替换的模式。这还假设您正在尝试从 HTTP GET 动词中检索数据。另一个贡献者,沿着 POST 路线走,但你没有指定。