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?

È stato utile?

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>.

Ecco maggiori informazioni su Accesso alle variabili dell'ambiente di Owin . Si noti che la variabile uri catturata e requestPath è leggermente diversa. Il requestPath inizierà con un / dove la variabile uri non lo farà. Inoltre, se il modello di rotta corrispondente è Get["/"], uri sarà null e requestPath sarà "/".

The views percorso restituirà un file HTML parziale, in base al percorso URL e tutti gli altri percorsi restituiranno la pagina di layout predefinita che avvolgerà la spa.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top