Захватите все сегменты URL после первого матча с Нэнси - PullRequest
4 голосов
/ 27 октября 2011

Я хотел бы иметь правило nancy, которое сопоставляет / захватывает все сегменты URL после первоначального совпадения.

Например, я хотел бы сделать это:

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
  • визитид
  • someother

Я также хотел бы сделать это для параметров строки запроса.

с учетом URL-адреса: / views / viewname? Pageid = 1 & visitid = 34 & someother = hello

тогда listOfOtherValues ​​в конечном итоге будет:

  • 1
  • 34
  • привет

Возможно ли это даже с Нэнси?

1 Ответ

4 голосов
/ 28 октября 2011

Для первой проблемы вы можете использовать регулярные выражения, а также простые имена для определения групп захвата.Таким образом, вы просто определяете перехват всех 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

Примечание: foreach over Request.Query - поддержка в v0.9 +

...