2015-05-20 6 views
16

Ich habe eine ASP.NET Web Api 2-Anwendung. Ich habe Swashbuckle hinzugefügt (Swagger für .NET). Es zeigt meine Endpunkte kein Problem, aber um eine Anfrage zu senden, muss ich einen Autorisierungsheader an diese Anfrage anhängen. Wenn ich das richtig verstehe, muss ich die Datei index.html (https://github.com/swagger-api/swagger-ui#how-to-use-it) so ändern, dass ich das geklonte Swashbuckle-Projekt kopiert habe, um index.html zu ändern und einige Header hinzuzufügen.Wie senden Autorisierungsheader mit einer Anfrage in Swagger UI?

Ist das die einzige Möglichkeit Autorisierungsheader mit der Anfrage in Swashbuckle zu senden?

+0

https://github.com/swagger-api/swagger-ui#custom-header-parameters---for-basic-auth-etc –

+0

@ AlbertoPellizzon - wo wird Ich füge diesen Code hinzu? Welche Datei? – Marta

+0

nach der SwaggerUi-Initialisierung versuchen, Serching, wo es initialisiert wird, so etwas wie var swaggerUi = new SwaggerUi ({}); –

Antwort

11

Um brauchte ich Authorization-Header mit einer Anfrage mit Swagger UI senden an:

  1. Da der Name meiner Versammlung ist: My.Assembly und es enthält einen Ordner: Swagger, wo ich platziert meine Gewohnheit index.html, habe ich diese Zeile in SwaggerConfig.cs:

    c.CustomAsset("index", thisAssembly, "My.Assembly.Swagger.index.html"); 
    

Beachten Sie, dass index.html Lasten JavaScript- und CSS-Dateien. Ich musste alle Punkte in den Dateipfaden ändern, damit diese Dateien geladen werden konnten. Ich weiß nicht, warum es getan werden musste, aber es löste das Problem der die Datei geladen ...

  1. In der Datei index.html ich die

    geändert

    addApiKeyAuthorization()

Funktion so aussehen:

function addApiKeyAuthorization() { 
     var key = encodeURIComponent($('#input_apiKey')[0].value); 
     if (key && key.trim() != "") { 
      var value = "auth-scheme api_key=123456,order_id=56789"; 
      var authKeyHeader = new SwaggerClient.ApiKeyAuthorization("Authorization", value, "header"); 
      window.swaggerUi.api.clientAuthorizations.add("Authorization", authKeyHeader); 
     } 
    } 

Hinweis geändert I "Abfrage" auf "Header".

  1. ich diesen Code auch unkommentiert:

    var apiKey = "this field represents header but can be anything as long as its not empty"; 
    $('#input_apiKey').val(apiKey); 
    

, welcher Text in dem zweiten Textfeld angezeigt wird, aber es scheint nicht, was macht es enthält solange es nicht leer ist.

Das funktionierte für mich und ermöglichte mir, benutzerdefinierte index.html-Datei zu laden. Jetzt schaue ich Swagger UI Benutzer zu aktivieren, um den Wert der Header-Parameter zu ändern ...

+1

Doens't Arbeit für mich =/ –

+0

Erhalten Sie irgendwelche Fehler? – Marta

+1

Es funktioniert auch nicht für mich, keine Fehler. Wo haben Sie cat addApiKeyAuthorization? – Campinho

3

Ich habe unten Code in einer Js-Datei hinzugefügt und es als eine eingebettete Ressource zu meinem Web-API-Projekt hinzugefügt. Wenn Sie Swagger erstellen und ausführen, wird die api_key-Textbox durch das Autorisierungsschlüssel-Textfeld ersetzt, in das Sie Ihren AuthKey einfügen können. Bei jeder Anfrage fügt swagger ihn dem Request-Header hinzu.

(function() { 

    $(function() { 
     var basicAuthUI = 
     '<div class="input"><input placeholder="Authorization Token" id="input_token" name="token" type="text"></div>'; 
      $(basicAuthUI).insertBefore('#api_selector div.input:last-child'); 
      $("#input_apiKey").hide(); 
      $('#input_token').change(addAuthorization); 
    }); 

    function addAuthorization() { 
     var token = $('#input_token').val(); 

     if (token && token.trim() !== "") { 
      window.swaggerUi.api.clientAuthorizations.add("api_key", new window.SwaggerClient.ApiKeyAuthorization("Authorization", "Bearer " + token, "header")); 
      console.log("authorization added: Bearer = " + token); 
     } 
    } 

})(); 
0

für Inhaber Token ich es so gemacht habe: habe ich swashbuckle nur für die swagger.json Datei zu erzeugen und verwendet Swagger.Net für neueste Version SwaggerUI Anzeige (3.xx) und Anpassen es:

Also in meiner Projektreferenz, ich v hinzugefügt (via nuget):

references

swaggerui

in index.html:

<input id="bearer-code-input" type="text" placeholder="Enter Bearer Token here" style="width: auto" value="yourtoken" /> 

dann in SwaggerUIBundle Konstruktor:

const ui = SwaggerUIBundle({ 
..., 
requestInterceptor: function (req) { 
req.headers = { 
'Authorization': 'Bearer ' + document.getElementById('bearer-code- 
input').value 
, 'Accept': 'application/json', 
'Content-Type': 'application/json' 
}; 
return req; 
}, 
... }) 

Ergebnisanzeige: result

Ich habe maßgeschneiderten auch viele andere Funktionen (Json Modell Binder, Query-String-Parsing, benutzerdefinierten SwaggerGenerator das Standardverhalten außer Kraft zu setzen für ConflictingActionsResolver der Lage sein, mehrere Routenpfade zu handhaben, aber es ist nicht im Rahmen dieses Threads)

Verwandte Themen