#javascript #dom #swagger #swagger-ui #swashbuckle
#javascript #dom #swagger #swagger-пользовательский интерфейс #swashbuckle
Вопрос:
В пользовательском файле JavaScript в Swagger-UI я пытался получить доступ к URL-адресу запроса, потому что мне нужно было добавить его в заголовок перед отправкой запроса.
Посмотрев на источник для пользовательского интерфейса swagger, я не смог понять, как получить доступ к URL-адресу запроса.
В моем пользовательском файле JavaScript я обманул, украв из DOM с помощью:
(function() {
$(function() {
$(".submit").click(function (e) {
// doesn't work
// log(SwaggerUi.Views.OperationView.invocationUrl);
var url = $($(this).parentsUntil(".operations")[3]).find(".path")[0].innerText;
log("URL: " url);
});
});
})();
Но, поскольку это хак, он не будет работать, если у маршрута был параметр, подобный so : url/{param}
. Найти входной параметр и заменить было бы еще одним шагом, который я бы предпочел не предпринимать.
Мне не хватает какого-то простого способа, который позволил бы мне получить доступ к URL-адресу запроса примерно так: SwaggerUi.requestUrl
Комментарии:
1. что вы подразумеваете под invocationUrl?
2. URL-адрес запроса для контроллера. Например, если у меня есть контроллер
/get-items/{itemGuid}
, но URL-адрес запросаhttp://somedomain.com/api/v1/get-items/1234
3. Спрашиваю из любопытства, зачем вам нужно вызывать URL-адрес из пользовательского JavaScript?
4. Я ищу URL-адрес запроса, потому что мне нужно передать его в заголовке моей службе. Редактирование вопроса, чтобы отразить URL-адрес запроса вместо URL-адреса вызова.
5. Тем не менее, я не понимаю, зачем вам нужен URL в заголовке
Ответ №1:
Разработанное решение для обхода DOM для получения необходимой информации вместо использования информации, хранящейся в Swagger-UI.
(примечание: при использовании встроенного Swagger-UI, предоставленного Swashbuckle 5.4, ваш пробег может отличаться, если вы используете другую версию Swagger-UI)
$(".submit").click(function (e) {
var originalUrl = $($(this).parentsUntil(".operations")[3]).find(".path")[0].innerText;
log(originalUrl);
var outputUrl = "";
$($(this).parentsUntil(".operations")[3])
.find("tbody.operation-params tr:contains('path')")
.find("input")
.each(function () {
var pathParam = $(this).attr('name');
log(pathParam);
var userInput = $(this).val();
log(userInput);
outputUrl = originalUrl.replace("{" pathParam "}", userInput);
log(outputUrl);
});
// final requestUrl or invocationUrl
var requestUrl = $(".footer h4").html().match(/: (/[w-] )/)[1] outputUrl;
});