2

在 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()
}

其中过滤器定义为

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)

但是您可能需要为此使用帖子,而不是获取。解决这个问题的常用方法是对完全构建的 URI 执行 Post-Redirect-Get,这对于缓存也更好

于 2010-05-21T08:48:26.067 回答