4

我想要在初始匹配后匹配/捕获所有 url 段的 nancy 规则。

例如,我想这样做:

有一个类似的网址:/views/viewname/pageid/visitid/someother

和这样的规则:

Get["/views/{view}/{all other values}"] = parameters =>
 {
    string view = parameters.view;

    List<string> listOfOtherValues = all other parameters..

    return ...
 };

listOfOtherValues 最终会是:

  • pageid
  • 访问ID
  • 其他

我也想对查询字符串参数执行此操作。

给定一个像这样的网址:/views/viewname?pageid=1&visitid=34&someother=hello

那么 listOfOtherValues 最终会是:

  • 1
  • 34
  • 你好

南希甚至可以做到这一点吗?

4

1 回答 1

4

对于您的第一个问题,您可以使用正则表达式以及简单的名称来定义您的捕获组。因此,您只需定义一个 catch all RegEx。
对于您的第二个,您只需要枚举 Request.Query 字典。

这是一些在单个路由中演示两者的代码。

public class CustomModule : NancyModule
{
    public CustomModule() {
        Get["/views/{view}/(?<all>.*)"] = Render;
    }

    private Response Render(dynamic parameters) {
        String result = "View: " + parameters.view + "<br/>";
        foreach (var other in ((string)parameters.all).Split('/'))
            result += other + "<br/>";

        foreach (var name in Request.Query)
            result += name + ": " + Request.Query[name] + "<br/>";

        return result;
    }
}

有了这个,您可以调用一个 URL,例如/views/home/abc/def/ghi/?x=1&y=2并获取输出 View: home
abc
def
ghi
x: 1
y: 2

注意:foreachover Request.Query 在 v0.9+ 中被支持

于 2011-10-27T21:46:19.443 回答