2013-03-25 4 views
6

Sto implementando un'API tramite un servizio Web, utilizzando Nancy.C'è un modo per elencare tutti i percorsi disponibili in un'applicazione Nancy?

Mi piacerebbe avere una pagina/help o/docs che elenchi programmaticamente tutti i percorsi disponibili, in modo che possa fornire agli utenti API la documentazione generata automaticamente/aggiornata.

Qualche idea su come realizzare questo? (All'interno di un gestore di percorsi, "this.routes" dà accesso a una raccolta di percorsi definiti, ma solo sull'attuale NancyModule. Avrei bisogno di un modo programmatico per elencare tutti i percorsi registrati, non solo quelli del modulo corrente)

+3

ho risposto presente sulla questione che hai postato sul nostro gruppo di utenti – TheCodeJunkie

risposta

10

Non è esattamente quello che ti serve, ma c'è anche un pannello cruscotto integrato a Nancy. Per abilitarlo fare:

public class CustomBootstrapper : DefaultNancyBootstrapper 
{ 
    protected override DiagnosticsConfiguration DiagnosticsConfiguration 
    { 
     get { return new DiagnosticsConfiguration { Password = @"secret"}; } 
    } 
} 

E poi si può accedere su {yournancyapp}/_ tutto regolare

https://github.com/NancyFx/Nancy/wiki/Diagnostics

0

Esempio di come usare IRouteCacheProvider come @grumpydev di cui this answer:

// within your module 
public class IndexModule : NancyModule 
{ 
    // add dependency to IRouteCacheProvider 
    public IndexModule(Nancy.Routing.IRouteCacheProvider rc) 
    { 
     routeCache = rc; 
     Get["/"] = GetIndex; 
    } 

    private Nancy.Routing.IRouteCacheProvider routeCache; 

    private dynamic GetIndex(dynamic arg) 
    { 
     var response = new IndexModel(); 

     // get the cached routes 
     var cache = routeCache.GetCache(); 

     response.Routes = cache.Values.SelectMany(t => t.Select(t1 => t1.Item2)); 

     return response; 
    } 
} 

public class IndexModel 
{ 
    public IEnumerable<Nancy.Routing.RouteDescription> Routes { get; set; } 
} 

È possibile ottenere le informazioni di routing come Path e Method dalla l ist di Nancy.Routing.RouteDescription. Ad esempio, con questo punto di vista:

<!DOCTYPE html> 
<html> 
<body> 
<p>Available routes:</p> 
<table> 
<thead><tr><th>URL</th><th>Method</th></tr></thead> 
<tbody> 
@Each.Routes 
<tr><td>@Current.Path</td><td>@Current.Method</td></tr> 
@EndEach 
</tbody> 
</table> 
</body> 
</html>