3

当 swagger.json 托管在网站上时,我可以使用 Autorest_core 3 生成客户端,但当它托管在 localhost 上时则不能。

但是,如果我将 swagger.json 从本地主机剪切并粘贴到文件中,则可以生成客户端。

在 startup.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

[编辑说明]

我已经对这个问题进行了广泛的编辑,因为我之前认为我的问题可能与我使用的 autorest 版本有关。我实际上并不清楚我是否可以使用 autorest v2 从 localhost swagger.json 生成

我只是发现如果我将 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();
        }

在项目调试选项卡中,我有

应用网址

[更新]

我取消选中 ssl 并成功运行以下命令。

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

如果我点击我看到的网址 不安全的 url 消息

4

1 回答 1

2

添加http到后--input-file,问题为我解决了:

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

更新

在 HTTPs / TLS 方面,如果正确配置了 HTTPs / TLS 并且证书来自受信任的 CA,则 autorest 将自动工作。

如果使用自签名证书进行开发,则需要额外的步骤以允许在 NodeJS 中使用自签名证书:

  1. 已安装且受信任的开发证书
  2. NODE_TLS_REJECT_UNAUTHORIZED系统变量设置为 0
  3. 关闭并重新启动所有控制台
于 2020-03-28T05:18:23.453 回答