Question

Ne NancyFX prend en charge ASP.NET MVC comme "Catch All" route?J'en ai besoin, que, fondamentalement, pour correspondre à chaque URL.Ce qui est très pratique pour la construction de la Single Page applications.

Est-ce possible?

Était-ce utile?

La solution

Oui, à l'aide de Regex

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

Mais vous n'en avez pas vraiment besoin pour la construction d'une application à une seule page avec NancyFX - Vous pouvez simplement utiliser Get and Publier avec toute votre logique de routage et avoir toujours une application de page unique.

Autres conseils

Tested in Nancy version 0.23.2

Get[@"/(.*)"] ne fonctionne pas pour moi comme un fourre-tout de la route.Les routes "/", "/foo/bar", et pour les trajets plus longs ne serait pas attraper.Il semble comme il est impossible de s'avoir à définir un Get["/"] route pour la racine de l'URL.Rien d'autre ne semble l'attraper (essayé Get["{uri*}"]).Voici comment j'ai fini par la définition de mes itinéraires (gardez à l'esprit que je suis en train de faire ce pour un Angulaire de l'application):

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"];
};

Il est important de comprendre Modèle De Notation.L'itinéraire modèles sont pondérées, si deux itinéraires correspondent à la même url segment, le score le plus élevé gagne.L'attrape-tout est pondéré 0 et même si l' /views/{uri*} modèle de route est aussi un fourre-tout, il commence avec un littéral, qui est pondéré 10000, de sorte qu'il va l'emporter sur toutes les lignes qui commencent par /points de vue.

Voici plus d'informations sur L'accès Owin de Variables d'Environnement.Notez que la capture d' uri variable et requestPath sera légèrement différente.L' requestPath va commencer avec un / où que l' uri variable ne sera pas.Aussi, si la route correspondante modèle est Get["/"], uri sera null et requestPath sera "/".

L' Vues la route sera de retour partiel d'un fichier html, fondée sur le chemin de l'url, et toutes les autres routes sera de retour le défaut de Mise en page qui aura pour effet de démarrer le SPA.

Une réponse mise à jour pour laquelle la solution de @Synhershko ne fonctionne pas.Essayez:

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

Cela capturera tous les chemins sauf pour la page d'index.Je ne suis pas sûr que cela fonctionnera dans le contexte de l'angulaire, mais cela a fonctionné pour moi lorsque vous essayez de pirater un serveur simple avec un seul gestionnaire.

La réponse fournie par @synhershko ne fonctionne pas pour moi.Il ne gère pas / utilisateurs / 2 ou tout autre itinéraire contenant plus de segments.

ci-dessous fonctionne fonctionne sur ma machine;):

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

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

Ma solution n'est pas parfaite, car elle ne correspond pas tout .J'ai répété autant de "/ 0.*)" comme dans ma plus longue route angulaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top