2015-04-03 12 views
11

Dopo aver pubblicato la mia app per le API, visualizzo la schermata di errore gialla di ASP.NET. Il messaggio di errore dice "Una rotta denominata 'swagger_docs' è già presente nella collezione di rotte".Perché sto ricevendo "Una rotta denominata 'swagger_docs' è già presente nella raccolta delle rotte" dopo aver pubblicato la mia App per le API?

Come posso risolvere questo?

+0

Nel mio caso questo è successo dopo aver rinominato il progetto e ricompilato. Le DLL per il progetto con lo spazio dei nomi del progetto prioritario erano ancora nel BIN. Cancellato tutto dal cestino e ricompilato. –

risposta

30

Questo non è correlato alle applicazioni API di per sé ma più attorno all'API Web. Ciò che fa scattare l'errore è piuttosto semplice:

  1. Si pubblica l'app API che si basa sull'API Web.
  2. È scartare il progetto e iniziare a lavorare su una nuova API app basata su API Web
  3. si desidera pubblicare la nuova API App al posto del vecchio API App si è creato al punto 1.
  4. Si seleziona l'API App durante "Pubblica .." e ottieni il profilo di pubblicazione dell'app esistente API che abbiamo implementato al passaggio 1.
  5. Si distribuisce utilizzando Web Deploy e il profilo di pubblicazione, la nuova App per le API sopra quella precedente.

Ciò causerà il problema che ho spiegato prima. Ciò accade perché ci sono due percorsi registrati da Swashbuckle quando provi ad avviare l'app. Uno di quelli vecchi e uno di quelli nuovi. Questo perché i vecchi file sono ancora presenti nella destinazione.

Per risolvere questo problema, durante la distribuzione Web, fare clic sulla scheda Impostazioni e quindi espandere "Opzioni di pubblicazione file". C'è una casella di controllo, chiamata "Rimuovi file aggiuntivi dalla destinazione". Questo risolverà il problema in quanto lascerà solo i file che si distribuiscono a destinazione e non quelli vecchi.

Settings -> File Publish Options

Speranza che aiuta.

+0

Perfetto, risolto anche il mio problema – TheTiger

+3

Cosa succede se si verifica il tentativo di eseguire il debug dell'applicazione in locale? – plog17

3

Cosa succede se si tenta di eseguire il debug dell'applicazione localmente? Questo è successo per me, e la ragione è stata, ho ribattezzato il nome del mio assembly. Quindi la cartella bin aveva due DLL per lo stesso progetto con nomi diversi che hanno causato questo errore. Una volta cancellato il vecchio nome dll va tutto bene. Spero che questo ti aiuti.

+0

Questo post non è un tentativo reale di rispondere alla domanda. Si noti che [StackOverflow non funziona come un forum di discussione] (http://stackoverflow.com/tour), si tratta di un sito di domande e risposte in cui ogni post è una domanda o una risposta a una domanda. I post possono anche avere [commenti] (http://stackoverflow.com/help/privileges/comment) - frasi piccole come questa - che possono essere utilizzate per criticare o richiedere chiarimenti da un autore. Questo dovrebbe essere un commento o una [nuova domanda] (http://stackoverflow.com/questions/ask) –

3

Questo accade perché Tu probally si sta configurando percorso nella classe WebApiConfig e classe SwaggerConfig, come spiegato di seguito:

WebApiConfig di file:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     SwaggerConfig.Register(); 
    } 
} 

SwaggerConfig di file:

using Swashbuckle.Application; 

[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")] 

namespace NEOH.Api 
{ 
    public class SwaggerConfig 
    { 
     public static void Register() 
     { 

Quello che dovresti fare è rimuovere la chiamata di assemblaggio sul file SwaggerConfig.

Dovrebbe funzionare.