2

OpenRasta で、同じキーの値の配列を送信し、クエリ パラメーターの配列を受け入れるハンドラー メソッドにマップできる Uri パターンを持つことは可能ですか。

例: コレクションから Dave Smith という名前の連絡先をすべて返します。

HTTP GET /contacts?filterBy=first&filterValue=デイブ&filterBy=last&filterValue=スミス

以下の構成で:

Uri 文字列のパターン マッチングに最適な構文はどれですか? (提案を歓迎します)

ResourceSpace.Has.ResourcesOfType<List<ContactResource>>()
    .AtUri("/contacts")
    .And.AtUri("/contacts?filterBy[]={filterBy}[]&filterValue[]={fv}[]") // Option 1
    .And.AtUri("/contacts?filterBy={filterBy}[]&fv={fv}[]") // Option 2

次の Handler メソッドにマップされます。

public object Get(params Filter[] filters)
{
    /*
    create a Linq Expression based on the filters using dynamic linq
    query the repository using the Linq
    */

    return Query.All<Contact>().Where(c => c.First == "Dave" && c.Last == "Smith").ToResource()
}

ここで、Filter は次のように定義されます

public class Filter
{
    public string FilterBy { get; set; }
    public string FilterValue { get; set; }
}
4

1 に答える 1

4

.AtUri("/contacts?filterBy={filterby}&filterValue={filterValue}")喜んでマップする必要があります

Post(string[] filterby, string[] filterValues)

バグでない場合は、正しい方法で処理されるはずです。

少し良いものが必要な場合は、オブジェクト構文を使用することもできます。

<input name="Filter:0.FilterBy" />
<input name="Filter:1.FilterBy" />

そして持っている

Post(IEnuemrable<Filter> filter)

しかし、これには get ではなく、おそらく post を使用する必要があります。これを解決する通常の方法は、完全に構築された URI に対して Post-Redirect-Get を実行することです。これはキャッシュにも適しています。

于 2010-05-21T08:48:26.067 に答える