在与Nancy初次匹配后捕获所有网址片段

时间:2011-10-27 17:23:20

标签: nancy

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

例如我想这样做:

有一个网址:/ 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
  • visitid
  • 一些其它

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

给出如下的网址:/ views / viewname?pageid = 1&amp; visitid = 34&amp; someother = hello

然后listOfOtherValues将最终成为:

  • 1
  • 34
  • 你好

这对南希来说是否可能?

1 个答案:

答案 0 :(得分:4)

对于第一个问题,您可以使用正则表达式和简单名称来定义捕获组。因此,您只需定义一个捕获所有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;
    }
}

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

注意: 在{v0.9 +

中支持foreach over Request.Query