Nancyfx cattura tutta la rotta
-
12-12-2019 - |
Domanda
Nanctancyfx supporta ASP.NET MVC come "Catch all" Route?Ne ho bisogno, che fondamentalmente corrispondono ad ogni URL.Questo è molto utile per la creazione di applicazioni di singola pagina.
è possibile?
Soluzione
Sì, usando regex
Get[@"/(.*)"] = parameters => {
return View["viewname", parameters];
};
.
Ma non ne hai davvero bisogno per la creazione di un'applicazione di una singola pagina con Nancyfx - puoi semplicemente utilizzare GET e POST con tutte le tue logiche di routing e hai ancora un'app di pagina singola.
Altri suggerimenti
Tested in Nancy version 0.23.2
Get[@"/(.*)"]
non ha funzionato per me come un percorso di cattura. I percorsi "/" , "/ Foo / Bar" e percorsi più lunghi non catturerebbero. Sembra che non ci sia aggirare il dover definire un percorso Get["/"]
per l'URL della radice. Nient'altro sembra prenderlo (provato Get["{uri*}"]
). Ecco come ho finito per definire i miei percorsi (tenere a mente sto facendo questo per un'applicazione angolare):
.
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"];
};
È importante capire Schema del modello . I modelli di rotta sono ponderati, se due percorsi corrispondono allo stesso segmento URL, il punteggio più alto vince. Il modello di catch-tutto è ponderato 0
e anche se il modello di rotta /views/{uri*}
è anche un catch-tutto, inizia con un letterale, che è ponderato 10000
, quindi vincerà tutti i percorsi che iniziano con / viste < / Em>.
Una risposta aggiornata per la quale la soluzione di @synhershko non funziona.Prova:
Get[@"^(.*)$"] = parameters => {
return "hi";
};
.
Acquisterà tutti i percorsi ad eccezione della pagina dell'indice.Non sono sicuro che questo funzioni nel contesto dell'Angular, ma questo ha funzionato per me quando cerchi di hackerare un semplice server con un solo gestore.
Risposta fornita da @synhershko non funziona per me.Non mantiene / utenti / 2 o qualsiasi altra rotta contenente più sedi.
Sotto il codice funziona sulla mia macchina;):
public class IndexModule : NancyModule
{
dynamic IndexPage() { return View["Index"]; }
public IndexModule()
{
Get["/"] = _ => { return IndexPage(); };
Get["/(.*)"] = _ => { return IndexPage(); };
Get["/(.*)/(.*)"] = _ => { return IndexPage(); };
Get["/(.*)/(.*)/(.*)"] = _ => { return IndexPage(); };
}
}
.
La mia soluzione non è perfetta, perché non corrisponde tutto .Ho ripetuto il maggior numero di '/(.*)' come nella mia strada angolare più lunga.