Вопрос

Поддерживает ли NancyFX ASP.NET MVC, например маршрут «Catch All»?Мне нужен тот, который в основном соответствует каждому URL-адресу.Это очень удобно для создания одностраничных приложений.

Это возможно?

Это было полезно?

Решение

Да, используя Regex

Get[@"/(.*)"] = parameters => {
    return View["viewname", parameters];
};
.

Но вам это не нужно для создания приложения одной страницы с NANCYFX - вы можете просто использовать Get и Post со всей логикой маршрутизации, и все еще есть приложение для одной страницы.

Другие советы

Tested in Nancy version 0.23.2

Get[@"/(.*)"] для меня не работал как универсальный маршрут.Маршруты "/", "/фу/бар", а более длинные маршруты не поймали бы.Кажется, что не обойтись без определения Get["/"] маршрут для корневого URL-адреса.Кажется, больше ничего не ловит (пробовал Get["{uri*}"]).Вот как я определил свои маршруты (имейте в виду, что я делаю это для приложения Angular):

Get["/views/{uri*}"] = _ => { return "A partial view..."; };
Get["/"] =
Get["/{uri*}"] = _ =>
{
    var uri = (string)_.uri;// The captured route
    // If you're using OWIN, you can also get a reference to the captured route with:
    var environment = this.Context.GetOwinEnvironment();// GetOwinEnvironment is in the 'Nancy.Owin' namespace
    var requestPath = (string)environment["owin.RequestPath"];
    return View["views/defaultLayout.html"];
};

Важно понять Оценка шаблонов.Шаблоны маршрутов взвешиваются: если два маршрута соответствуют одному и тому же сегменту URL-адреса, выигрывает более высокий балл.Всеобъемлющий шаблон взвешен 0 и хотя /views/{uri*} Шаблон маршрута также является универсальным, он начинается с литерала, который имеет взвешенный вес. 10000, поэтому он выиграет на всех маршрутах, начинающихся с /Просмотры.

Вот дополнительная информация о Доступ к переменным среды Owin.Обратите внимание, что захваченный uri переменная и requestPath будет немного отличаться.А requestPath начнется с / где как uri переменная не будет.Кроме того, если совпадающий шаблон маршрута Get["/"], uri будет null и requestPath будет "/".

А Взгляды маршрут вернет частичный HTML-файл на основе URL-адреса, а все остальные маршруты вернут страницу макета по умолчанию, которая будет загружать SPA.

Обновленный ответ, на который решение @synhershko не работает.Попробуйте:

Get[@"^(.*)$"] = parameters => {
    return "hi";
};
.

Это будет захватывать все пути, кроме страницы индекса.Я не уверен, что будет работать в контексте угловой, но это сработало для меня при попытке взломать простой сервер с одним обработчиком.

Ответ, предоставленный @synhershko не работает для меня.Он не обрабатывает / пользователи / 2 или любой другой маршрут, содержащий больше серите.

ниже код работает на моей машине;):

public class IndexModule : NancyModule
{
    dynamic IndexPage() { return View["Index"]; }

    public IndexModule()
    {
        Get["/"] = _ => { return IndexPage(); };
        Get["/(.*)"] = _ => { return IndexPage(); };
        Get["/(.*)/(.*)"] = _ => { return IndexPage(); };
        Get["/(.*)/(.*)/(.*)"] = _ => { return IndexPage(); };
    }
}
.

Мое решение не идеально, потому что он не совпадает все .Я повторил столько "/(.*), как в моем длинном угловом пути.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top