2010-05-20 42 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

相關問題