在OpenRasta中,模式匹配多个键/值对是否可能?

时间:2010-05-20 17:19:26

标签: .net query-string uri pattern-matching openrasta

OpenRasta中是否可以使用Uri模式,该模式允许提交相同键的值数组并将其映射到接受查询参数数组的处理程序方法。

示例:从集合中返回名为Dave Smith的所有联系人。

HTTP GET / contacts?filterBy = first& filterValue = Dave& filterBy = last& filterValue = Smith

配置为:

哪种语法最适合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; }
}

1 个答案:

答案 0 :(得分: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)

但你可能需要为此使用帖子,而不是获取。解决这个问题的常用方法是进行后重定向 - 获取完全构建的URI,这也更适合缓存