2010-05-20 41 views
2

在OpenRasta中是否有可能让Uri模式允许提交相同键值的数组并将其映射到接受查询参数数组的处理程序方法。在OpenRasta中,是否可以匹配多个键/值对?

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

HTTP GET /触点filterBy =第一& filterValue =戴维& filterBy =最后& 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 

将映射到的处理程序方法:

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; } 
} 
+0

您好斯科特,您是否最终找到了解决方案?需要做类似的事情。 – 2010-11-30 12:19:47

回答

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-Redirect-获得一个完全构建的URI,这对于缓存来说也更好

+0

+1后重定向获取。 – 2011-03-26 00:06:07

+0

@serialseb是否有更好的方法来过滤OpenRasta中的List资源类型? – IsmailS 2011-12-28 13:12:40

+0

不,因为过滤不是一个http概念,所以在OR中使用这种方法进行烘焙会让fx尝试不做的决定。 – SerialSeb 2012-01-25 16:16:15

相关问题