Доступ к URL-адресу вызова в пользовательском интерфейсе Swagger

#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;
});