Как отправить заголовок авторизации с запросом в Swagger UI?
У меня есть ASP.NET приложение Web Api 2. Я добавил к нему Swashbuckle (Swagger для .NET). он отображает мои конечные точки без проблем, но для отправки запроса мне нужно прикрепить заголовок авторизации к этому запросу. Если я правильно понимаю, для этого мне нужно изменить индекс.html-файл (https://github.com/swagger-api/swagger-ui#how-to-use-it ) поэтому я клонировал проект Swashbuckle, чтобы изменить индекс.html и добавить некоторые заголовки.
Разве это единственный способ отправить заголовок авторизации с запросом в Swashbuckle?
3 ответов:
Для отправки заголовка авторизации с запросом с помощью Swagger UI мне нужно было:
Дано имя моей сборки: My.Сборка и она содержит папку: Swagger, где я разместил свой пользовательский индекс.html, я добавил эту строку в SwaggerConfig.cs:
c.CustomAsset("index", thisAssembly, "My.Assembly.Swagger.index.html");Обратите внимание на этот индекс.html загружает файлы javascript и css. Я должен был изменить все точки на пунктирные в пути к файлам, чтобы эти файлы загружались. Я не знаю, почему это нужно было сделать, но это решило проблему. проблема загрузки файла...
В указателе.html файл я модифицировал
AddApiKeyAuthorization ()
Функция выглядит так:
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); } }Примечание я изменил "запрос"на " заголовок".
Я также раскомментировал этот код:
var apiKey = "this field represents header but can be anything as long as its not empty"; $('#input_apiKey').val(apiKey);Который будет отображать текст во втором текстовом поле, но кажется, что это не имеет значения, что он содержит, пока он не пуст.
Это работало на меня и позволяло мне загружать пользовательский индекс.HTML-файл. Теперь я смотрю на то, чтобы позволить пользователю Swagger UI манипулировать значением параметров заголовка...
Я добавил приведенный ниже код в файл js и добавил его в качестве встроенного ресурса в свой проект web api. Когда вы создаете и запускаете Swagger, текстовое поле api_key будет заменено текстовым полем ключа авторизации, в которое вы можете вставить свой AuthKey, и при каждом запросе swagger добавит его в заголовок запроса.
(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); } } })();
Для знака носителя я сделал это таким образом: Я использовал swashbuckle только для создания чванства.файл json и используется Swagger.Net для отображения последней версии SwaggerUI (3.xx) и его настройка:
Итак, в моих ссылках на проект я добавил (через nuget):
В индексе.html:
<input id="bearer-code-input" type="text" placeholder="Enter Bearer Token here" style="width: auto" value="yourtoken" />Тогда в конструкторе SwaggerUIBundle:
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; }, ... })Я также настроил много других функции (JSON model binder, синтаксический анализ строки запроса, пользовательский SwaggerGenerator для переопределения поведения по умолчанию для ConflictingActionsResolver, чтобы иметь возможность обрабатывать несколько путей маршрута, но это не входит в область действия этого потока)



Comments