在我相当有限的OpenRasta经验中,您可以使用.And方法来添加额外的.AtUri资源位置。
I.e.你的情况
ResourceSpace.Has
.ResourcesOfType<Request>()
.AtUri("/processing").And.AtUri("/processing/{processid}")
.HandledBy<SomeHandler>()
.TranscodedBy<SomeCodec>();
其中{柯利括号}指定你的处理方法,即输入参数:
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文档中发现一张纸条,上面specifed,你必须有destinct(只一个)ResourceSpace定义每个匹配的类型和处理程序。换句话说,您不能使用相同的HandledBy处理程序类复制相同的ResourceOfType类。我测试了这一点,情况就是这样,也许你为什么首先提出这个问题。
N.b.这段代码是完全没有经过测试的,我刚刚把我写的代码写在你的类和uri中已知的地方。这也假设你正试图从HTTP GET动词中检索数据。另一个贡献者沿着POST路线走了,但你还没有指定。
如果OpenRasta框架强制执行此操作,但没有尝试为一个资源注册多个资源,这肯定违反了REST架构风格。一个资源可以有许多URI(地址),但是一个URI只应该**地址**一个资源。 – 2011-12-23 18:34:13
@SixtoSaez:我理解你的观点,但你不认为这只是一个观点,你如何看待你的资源。我有一个观点,即所有的都是“请求”类型。所以我没有看到他们作为不同的资源。 – 2011-12-26 05:34:57
如果您想要表示资源的不同“视图”,那么您要使用的是OpenRasta中的不同编解码器。在REST中,可以使用不同的媒体类型(编解码器)来表示给定的资源,但地址只应标识特定的资源。 – 2011-12-26 21:42:41