Захват всех сегментов URL после первоначального сопоставления с Nancy

#nancy

#nancy

Вопрос:

Я хотел бы иметь правило 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
  • visitid
  • кто-то другой

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

учитывая URL-адрес типа: /views/viewname?pageid=1amp;visitid=34amp;someother=привет

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

  • 1
  • 34
  • здравствуйте

Возможно ли это вообще с помощью Nancy?

Ответ №1:

Для вашей первой проблемы вы можете использовать регулярное выражение, а также простые имена для определения ваших групп захвата. Итак, вы просто определяете общее регулярное выражение.
Для вашего второго вам просто нужно перечислить через запрос.Словарь запросов.

Вот некоторый код, который демонстрирует оба в одном маршруте.

 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 resu<
    }
}
 

Установив это, вы можете вызвать URL, например, /views/home/abc/def/ghi/?x=1amp;y=2 и получить выходные данные
View: home
abc
def
ghi
x: 1
y: 2

Примечание: foreach запрос over.Запрос поддерживается в версии 0.9

Комментарии:

1. В вашем первом примере, почему я не могу сопоставить что-то вроде /views/home/1.2