4

最初の一致後にすべての URL セグメントを一致/キャプチャする 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 は次のようになります。

  • ページID
  • 訪問者
  • 誰か

クエリ文字列パラメーターについてもこれを行いたいと思います。

/views/viewname?pageid=1&visitid=34&someother=hello のような URL を指定すると、

その場合、listOfOtherValues は次のようになります。

  • 1
  • 34
  • こんにちは

これはナンシーでも可能ですか?

4

1 に答える 1

4

最初の問題では、正規表現と単純な名前を使用してキャプチャ グループを定義できます。したがって、すべての正規表現をキャッチするだけです。
2 つ目は、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

注:foreach以上の Request.Query は v0.9+ でサポートされています

于 2011-10-27T21:46:19.443 に答える