2012-11-26 10 views
10

Ho aggiunto con successo un web api controller a un'applicazione esistente MVC4.Aggiunta di API Web e documentazione API a un progetto MVC esistente

Mi piacerebbe avere la funzionalità di documentazione api disponibile nei nuovi campioni di API Web (ex. http://sample.hostname.com/help). Credo che utilizzino la classe ApiExplorer. Ho provato semplicemente copiando l'area HelpPage nel mio progetto, ma ottengo un errore

"The type String cannot be constructed. You must configure the container to supply this value"

quando provo a navigare per aiutare.

Che cosa devo fare per aggiungere la documentazione automatizzata delle API?

risposta

1

controllare il blog di Yao per quanto riguarda Aiuto Pagina:

http://blogs.msdn.com/b/yaohuang1/

+0

tutto il sampl Funzionano all'interno del progetto autonomo dell'API Web, non esiste un campione in cui utilizzare HelpPage dal progetto MVC esistente – mare

+0

è possibile installare il pacchetto nuget 'Microsoft.AspNet.WebApi.HelpPage' che creerà un'area chiamata' HelpPage 'nella tua applicazione MVC. –

+0

è possibile installarlo, sì, e l'ho fatto ma non sta raccogliendo alcun controller Api per la documentazione, quindi i documenti sono vuoti, forse puoi provare il contrario? – mare

2
  1. Nel package manager NuGet, della ricerca di "helppage" tra i pacchetti in linea .
  2. Installarlo (diventa sempre aggiornato e lo fa tutto il necessario, anche se avete l'ultima .net)
  3. In aggiungerà un'area e in quella di creare tutti i file necessari voi necessità. Crealo e provalo sotto [your_root]/Aiuto
  4. Guarda il video su Yao's blog here per avere una rapida panoramica su come personalizzarlo. Il video è un po 'vecchio, è ancora valido .
+0

questo non funziona all'interno del modello MVC – mare

4

La mia ipotesi è che il requisito sia fornire documentazione automatizzata per endpoint API Web, non endpoint MVC. Sulla base di questa ipotesi, ho creato un POC che funziona come previsto e posso sempre inviarti una e-mail con zip se necessario :).

  1. Creare una nuova applicazione Internet MVC 4. Ciò genererà i controller Home e Account, le visualizzazioni corrispondenti e il routing MVC.

  2. Aggiungere il pacchetto Microsoft.AspNet.WebApi.HelpPage cercando "HelpPage" nella sezione Online del Gestore pacchetti.

  3. Aggiungi in una nuova cartella per i controller di API web chiamato "Api". Questo è guidato dal routing WebApi impostato nel metodo Register di WebApiConfig.cs. La mia è la seguente:

    public static void Register(HttpConfiguration 
    { 
        config.Routes.MapHttpRoute(
         name: "DefaultApi", 
         routeTemplate: "api/{controller}/{id}", 
         defaults: new { id = RouteParameter.Optional }); 
    } 
    
  4. generare il progetto. Hit endpoint/help. Sputa tutti i punti finali nel mio controller api (un get e un post endpoint).

Questo non ha richiesto alcuna modifica alla cartella di area che viene generata aggiungendo il pacchetto di HelpPages. Tutto ciò che serviva era aggiungere una nuova cartella Api e un nuovo controller Api (vuoto) alla cartella, e due due endpoint veloci integrati nel nuovo controller.

+0

Con il mio progetto esistente questo non funziona ma lo proverò su un nuovo progetto appena possibile – mare

+0

Se non funziona, ho il sospetto che manchi qualche dipendenza. Crea un nuovo progetto e controlla le dll mancanti? Questo o forse hai un routing unico o una configurazione global.asax. –

+0

Sto inviando la tua risposta perché è la più dettagliata in realtà dicendo che dovrebbe funzionare e funziona (nei nuovi progetti MVC, a meno che tu non abbia installato qualcosa che bloccherebbe ApiExplorer, cosa che è accaduta nel mio caso) – mare

3

Posso confermare le risposte precedenti: la pagina HelpPage rileva qualsiasi controller indipendentemente da dove si trova se corrisponde al routing e eredita da ApiController.

Ho passato ore a cercare questo. Ho pensato, deve essere qualcosa che ho aggiunto al progetto che sta rovinando i miei percorsi/API. Così l'ho trovato dopo ore di installazione/disinstallazione di vari pacchetti Nuget. Il problema con il mio progetto era che avevo installato il pacchetto Glimpse.Mvc4. Questo pacchetto ha in qualche modo impedito allo ApiExplorer di prelevare le mie API. Questo è ovviamente un bug all'interno dei pacchetti Glimpse.Mvc4 (o Glimpse.AspNet) o un bug all'interno di ApiExporer (non ho avuto problemi a scoprire quale fosse il bug).

Lo riferirò al team Glimpse. Pubblicare questa risposta qui aiuterà forse anche qualcun altro.

+0

Come su oggi, Glimpse.Mvc4 stava causando problemi e ho dovuto rimuoverlo. Posso effettivamente provare e installare l'ultima versione (che potrebbe risolvere il problema). Grazie per la tua analisi, ha aiutato. – SBirthare

6

Come altri hanno già detto, è necessario prima installare il pacchetto NuGet Microsoft.AspNet.WebApi.HelpPage. Ciò creerà una nuova area di HelpPage nell'applicazione con le viste, i modelli ei controllori richiesti per visualizzare la documentazione.

Tuttavia, il HelpController che viene generato contiene un costruttore di sovraccarico:

public HelpController(HttpConfiguration config) 
{ 
    Configuration = config; 
} 

Questo non sembra di giocare bene con Unity (o probabilmente qualsiasi tipo di contenitore DI). Si ottiene questo errore:

[InvalidOperationException: The type String cannot be constructed. You must configure the container to supply this value.] 

Rimuovere questo sovraccarico e dovrebbe funzionare.

anche appena trovato un altro riferimento a questo: http://www.stefan-scheller.com/2013/08/the-type-string-cannot-be-constructed-web-api-with-unity/

+0

Direi che una soluzione migliore è quella con cui ho risposto. Anziché rimuoverlo, make è protetto. Non sei sicuro di quale versione di MVC stai usando, ma in 5.2.2 il costruttore senza parametri chiama quello che stai suggerendo viene rimosso. – Carl

+0

@Carl Potresti aver ragione, ma quando ho risposto a questo (più di un anno fa), MVC 5 era solo RC. Mi sarei riferito alla v4, come indicato dall'OP nella sua domanda. –

0

Ho appena incontrato questo problema. Ecco cosa è stato per me.

Avevo le pagine della Guida su un progetto precedente (con MVC 5 e Web API 2) quindi sapevo che era qualcosa di diverso nel mio nuovo progetto. Venuto fuori nel vecchio progetto (funzionante) stavo facendo solo DI nei controller WebApi, non nei controller MVC. Non avevo bisogno di DI nei controller MVC, quindi ho semplicemente commentato il codice bootstrapping di UnityDependencyResolver come resolver di dipendenze MVC (nel mio caso la classe UnityMvcActivator).

Ovviamente questa non è un'opzione per tutti, ma dove no, la risposta di @Adrian Brown sembra la soluzione migliore fino a quando non viene risolto.

5

V5.2.2 ha il seguente codice:

public HelpController() 
     : this(GlobalConfiguration.Configuration) 
    { 
    } 

    public HelpController(HttpConfiguration config) 
    { 
     Configuration = config; 
    } 

nel HelpController

Unità usa il costruttore con il maggior numero di argomenti, in modo da ottenere in modo da utilizzare il costruttore senza parametri ho cambiato il secondo sovraccarico protetti:

protected HelpController(HttpConfiguration config) 
    { 
     Configuration = config; 
    } 

E le pagine di aiuto sono tornati

+0

Grazie, questo ha risolto il mio problema! Ottenuto la tua risposta qui proveniente da [questo thread] (http://stackoverflow.com/questions/18389309/the-type-string-cannot-be-constructed), ho risolto il mio problema. –

+0

Grazie. Questa è la risposta più semplice e meno impattante. – NER1808