Авторест Не удалось разрешить чванство. json против файла, когда чванство. json обслуживается localhost - PullRequest
1 голос
/ 26 марта 2020

Я могу использовать Autorest_core 3 для генерации клиента, когда swagger. json размещен на веб-сайте, но не когда он размещен на localhost.

Однако, если я вырезал и вставил swagger. json с локального хоста в файл, после чего я могу сгенерировать клиента.

При запуске. ConfigureServices у меня есть

services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });

            c.CustomOperationIds(  d => (d.ActionDescriptor as ControllerActionDescriptor)?.ActionName);

А в Startup.Configure у меня есть

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        // Enable middleware to serve generated Swagger as a JSON endpoint.
        app.UseSwagger();
        app.UseSwagger(c =>
        {
            c.RouteTemplate =
                "api-docs/{documentName}/swagger.json";
        });

        // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
        // specifying the Swagger JSON endpoint.
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("./v1/swagger.json", "My API V1");
        });

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }   

Когда я запускаю API и пытаюсь сгенерировать клиент

autorest --v3 --input-file=localhost:44338/swagger/v1/swagger.json --csharp --output-folder=generated --namespace=Connector

, я получаю следующий вывод

https://aka.ms/autorest
   Loading AutoRest core      'C:\Users\kirst\.autorest\@autorest_core@3.0.6262\node_modules\@autorest\core\dist' (3.0.6262)
   Loading AutoRest extension '@microsoft.azure/autorest.csharp' (~2.3.79->2.3.84)
   Loading AutoRest extension '@microsoft.azure/autorest.modeler' (2.3.55->2.3.55)
  Error: Failed resolving 'localhost:44338/swagger/v1/swagger.json' against 'file:///D:/Users/kirst/source/repos/Dogs/'

Однако следующее работает

autorest --v3 --input-file=D:\Users\kirst\source\repos\Dogs\src\swagger.json --csharp --output-folder=generated --namespace=Connector

[Редактировать заметку]

Я широко редактировал этот вопрос, так как раньше я думал, что моя проблема может быть связана с тем, какую версию автореста я использовал. Я не совсем уверен, могу ли я сгенерировать с помощью localhost swagger. json, используя autorest v2

Я только что обнаружил, что могу генерировать с локального хоста, если вырезать и вставить swagger. json в файл. Я бы предпочел не делать этого.

К сожалению, вывод https://aka.ms/autorest, который дает 404

[Обновить]

Я пытался с префиксом http

Error: Could not read 'http://localhost:44338/swagger/v1/swagger.json'

аналогично https

Если я перехожу к http://localhost: 44338 / swagger / v1 / swagger. json Я получаю ошибку

This site can't be reached 

Если я перехожу к https://localhost: 44338 / swagger / v1 / swagger. json он перенаправляет на localhost: 44338 / swagger / v1 / swagger. json

Я попытался изменить конфигурацию следующим образом, но это не имело никакого значения

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHttpsRedirection();
        }

На вкладке отладки проекта у меня есть

app url

[Обновление]

Я снял галочку с ssl и успешно выполнил следующее.

autorest --v3 --input-file=http://localhost:60705/swagger/v1/swagger.json --csharp --output-folder=generated --namespace=Connector

если я нажму на URL, то увижу an insecure url message

1 Ответ

1 голос
/ 28 марта 2020

После добавления http к --input-file проблема для меня решена:

autorest --v3 --input-file=http://localhost:5000/swagger/v1/swagger.json --csharp

ОБНОВЛЕНИЕ

В терминах HTTP / TLS авторест будет автоматически работает, если HTTP / TLS настроен правильно, а сертификат получен от доверенного центра сертификации.

Если для разработки используется самозаверяющий сертификат, необходимо выполнить дополнительные действия, чтобы разрешить использование самоподписанного сертификата в NodeJS:

  1. Установленный и доверенный сертификат разработки
  2. Установить NODE_TLS_REJECT_UNAUTHORIZED системную переменную на 0
  3. Закрыть и перезапустить все консоли
...