0

複数のリソースを 1 つのハンドラーと 1 つの URI に登録したいので、オープン ラスタでこれが可能であることを確認したいと思います。オープンラスタに関するウェブサイトを少し調べましたが、これが可能かどうかを結論付けることができませんでしたか?

  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 でさまざまなものを識別しようとする傾向があり、タイプごとに 1 つの登録につながることに注意してください。

于 2012-01-24T15:39:44.310 に答える
2

私のかなり限られた OpenRasta の経験では、.And メソッドを使用して、.AtUri リソースの場所を追加できます。

つまりあなたの場合

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

{中かっこ} は、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 のドキュメントで、一致する Type と Handler ごとに destinct (1 つだけ) の ResourceSpace 定義が必要であると指定されたメモを見つけました。つまり、同じ ResourceOfType クラスを同じ HandledBy ハンドラー クラスで複製してはなりません。私はこれをテストしましたが、それが事実であり、おそらくそもそもなぜあなたが質問をしているのか.

注意: このコードは完全にテストされていません。私が書いたもののパターンを取り、既知のクラスと uri に置き換えました。また、これは、HTTP GET 動詞からデータを取得しようとしていることも前提としています。他の貢献者は POST ルートをたどりましたが、指定していません。

于 2012-11-26T10:36:11.960 に答える