Ignora dynamicmente il metodo WebAPI sul controller per la documentazione di api explorer

abbiamo implementato una web API e abbiamo un certo numero di controller API. Forniamo una documentazione API per la nostra API e ciò che vogliamo fare è escludere determinati metodi web dalla documentazione, ma vogliamo che ciò avvenga dynamicmente a seconda dell’ambiente che stiamo utilizzando. solo per darti una comprensione di cosa intendo, diciamo che ho il seguente metodo web

[ApiExplorerSettings(IgnoreApi = true)] public Product getProduct() { ... } 

Impostando la proprietà IgnoreAPI su ApiExplorerSettingAttribute su true, si esclude il metodo web dalla documentazione che è ciò che vogliamo, ma abbiamo bisogno di un modo per impostare il valore “true” in modo dinamico. Idealmente vorremmo avere una tabella di database con valori bool per ogni webMethod e in base a questi impostare il valore per la proprietà IgnoreAPi. C’è un modo per ottenere questo? Il tuo aiuto sarà molto apprezzato.

È ansible implementare un IApiExplorer personalizzato e registrarlo nei servizi dell’API Web per avere il pieno controllo su quali API sono elencate o meno.

Ecco un post del blog dello sviluppatore che ha implementato la maggior parte di questo: http://blogs.msdn.com/b/yaohuang1/archive/2012/05/13/asp-net-web-api-introducing-iapiexplorer-apiexplorer.aspx

Ed ecco la definizione dell’interfaccia IApiExplorer : http://msdn.microsoft.com/en-us/library/system.web.http.description.iapiexplorer(v=vs.118).aspx

Una cosa che potresti fare è derivare (o riutilizzare la fonte esistente) dell’implementazione di ApiExplorer e della base chiamata esistenti per ottenere l’elenco di default, e poi filtrarlo ulteriormente come vuoi.

E il commento di per s_hewitt, la raccomandazione è:

Derivando da ApiExplorer, l’implementazione dei due metodi ShouldExploreAction e ShouldExploreController è la strada da percorrere. Effettua le chiamate DB in questi due metodi, cercando in base a route, controller e action.

Non conosco molto della generazione di documentazione di WebAPI, ma conosco gli attributi. Gli attributi vengono compilati nel codice e generano valori codificati direttamente nei dati nell’EXE o nella DLL. Non possono essere cambiati.

Detto questo, potresti essere in grado di applicare gli attributi come secondo set dopo la normale compilazione. Forse PostSharp potrebbe aiutare qui? Forse la modifica della configurazione della soluzione potrebbe essere un modo per indicare l’ambiente che si desidera creare e con quali metodi ottenere il trattamento IgnoreApi. È ansible creare il proprio attributo da applicare ai metodi che descrivono gli ambienti in cui il metodo deve essere ignorato all’interno. (Penso che sia più probabile che tu possa fare ciò che vuoi in PostSharp se non provi a chiamare un database per ottenere questi dati.)