0

我想用一个处理程序和一个 URI 注册多个资源。所以想确认这在 open rasta 中是否可行。我浏览了一些关于开放拉斯塔的网站,但无法得出结论,这是否可能?

  ResourceSpace.Has
           .ResourcesOfType<Request>()
           .AtUri("/processing")
           .HandledBy<SomeHandler>()
           .TranscodedBy<SomeCodec>();    

我需要处理从基类“Request”派生的所有请求。如果有人能真正阐明这一点,那就太好了。

4

2 回答 2

2

因此,如果一切都是请求并且您想通过隧道传输内容,则可以使用您提供的注册。

将根据最接近的类型进行匹配,因此

public void Post(SpecificRequest specificRequest) { /*handles the SpecificRequest type */ }
public void Post(Request myRequest) { /* handles the default case */ }

也就是说,请注意,在 ReSTful 系统中,我们倾向于尝试使用不同的 URI 识别不同的事物,从而导致每种类型注册一个。

于 2012-01-24T15:39:44.310 回答
2

在我相当有限的 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 路线走,但你没有指定。

于 2012-11-26T10:36:11.960 回答