【问题标题】:In OpenRasta is it possible to Pattern match multiple key/value pairs?在 OpenRasta 中是否可以模式匹配多个键/值对?
【发布时间】:2010-05-20 17:19:25
【问题描述】:

在 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; }
}

【问题讨论】:

  • 嗨斯科特,你最后找到解决方案了吗?需要做类似的事情。

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


【解决方案1】:

.AtUri("/contacts?filterBy={filterby}&amp;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,这对于缓存也更好

【讨论】:

  • @serialseb 有没有更好的方法来过滤 OpenRasta 中的 List 类型的资源?
  • 不,因为过滤不是一个 http 概念,所以在 OR 中以一种方式进行烘焙会做出 fx 试图不为你做出的那种决定。
猜你喜欢
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 2015-08-08
  • 2017-03-25
  • 1970-01-01
  • 2017-03-09
相关资源
最近更新 更多