Bearer-Token in Swashbuckle aktivieren (Swagger-Dokument)
Erstellte ich eine asp.net webapi-Anwendung, die mit Einzelnen Account-Sicherheitso dass die Inhaber-token ist standardmäßig aktiviert. Es arbeitet fein, so dass ich in der Lage bin Sie zu testen, im Postbote ohne problem.
Hier kommt die Frage, wenn ich versuche zu integrieren, die Swagger-UI von Swashbuckle. Ich installierte die Swashbuckle von:
Install-Paket Swashbuckle
Ändern Sie dann die SwaggerConfig.cs:
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.ApiKey("Token")
.Description("Filling bearer token here")
.Name("Authorization")
.In("header");
}
.EnableSwaggerUi(c =>
{
c.EnableApiKeySupport("Authorization", "header");
};
Start meiner Anwendung, und füllen Sie den Bearer-token:
Aber es funktioniert nicht, wenn ich führen Sie die api-Anforderung, die benötigen Sie eine Berechtigung. Hier ist der screenshot:
Den bearer-token Hinzugefügt wird Genehmigung im header. Aber ich habe immer noch den Fehler 401. Ich Frage mich, ob es ist, weil das token kodiert ist (der RAUM wird ersetzt durch %20)? Irgendeine Idee? Danke.
By the way, ich wundere mich, wie Sie die /token in meinem Swagger-Dokument zu, so dass ich mit den token in Swagger-UI.
InformationsquelleAutor der Frage Zhou Hao | 2016-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update
Das Problem unten ist nun gelöst, in Swashbuckle v5.5.0.
Problem
Lief einfach in das exakt gleiche Problem. Ich denke, die Ursache ist diese Zeile in Swashbuckle-Quellcode:
Dies ist, wo der Wert aus dem HTML-input-Feld geht durch die URL-Codierung drehen den Raum in
%20
. Ich bin Planung zu öffnen, ein Problem in der Swashbuckle-repo auf GitHub.Abhilfe
Bis das Problem behoben ist, hier ist ein workaround basiert auf der Ersetzung der oben genannten Zeile mithilfe einer Javascript-Datei-Injektion in das Swagger-UI:
In das Projekt, wo Sie haben Swashbuckle installiert ist, erstellen Sie einen neuen Ordner und nennen Sie es "Swagger".
In den neuen Ordner, erstellen Sie eine neue Javascript-Datei namens "SwaggerUiCustomization.js" und legen Sie dieses Skript in es:
Im Projektmappen-Explorer, wählen Sie die Datei und drücke Alt+Enter zum Bearbeiten seiner Eigenschaften. In der Eigenschaften Fenster ändern Sie die Datei Build Action zu Eingebettete Ressource.
In Ihrem SwaggerConfig.cs-Datei fügen Sie die folgende Zeile innerhalb der
EnableSwaggerUi()
code-block:c.InjectJavaScript(thisAssembly,
"<Project_Default_Namespace>.Swagger.SwaggerUiCustomization.js");
Werden Sie sicher, natürlich, zu ersetzen
<Project_Default_Namespace>
mit Ihrem Projekt die Standard-namespace.Führen Sie Ihr Projekt aus und geben Sie "Träger" in das Textfeld ein. Beim Aufruf einer controller-action, sollten Sie sich dies genau die gleiche Wert - mit einem Leerzeichen statt
%20%
- auf der server-Seite.InformationsquelleAutor der Antwort urig