当 swagger.json 由 localhost 提供服务时,Autorest 无法针对文件解析 swagger.json
Autorest Failed resolving swagger.json against file when swagger.json is served by localhost
当 swagger.json 托管在网站上时我可以使用 Autorest_core 3 生成客户端,但当它托管在本地主机上时则不能。
但是,如果我从本地主机剪切并粘贴 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 我会看到
将http
添加到--input-file
后,问题为我解决了:
autorest --v3 --input-file=http://localhost:5000/swagger/v1/swagger.json --csharp
更新
就 HTTPs/TLS 而言,如果 HTTPs/TLS 配置正确且证书来自受信任的 CA,autorest 将自动运行。
如果使用自签名证书进行开发,需要额外的步骤才能在 NodeJS 中使用自签名证书:
- 已安装并受信任的开发证书
- 将
NODE_TLS_REJECT_UNAUTHORIZED
系统变量设为0
- 关闭并重新启动所有控制台
当 swagger.json 托管在网站上时我可以使用 Autorest_core 3 生成客户端,但当它托管在本地主机上时则不能。
但是,如果我从本地主机剪切并粘贴 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 我会看到
将http
添加到--input-file
后,问题为我解决了:
autorest --v3 --input-file=http://localhost:5000/swagger/v1/swagger.json --csharp
更新
就 HTTPs/TLS 而言,如果 HTTPs/TLS 配置正确且证书来自受信任的 CA,autorest 将自动运行。
如果使用自签名证书进行开发,需要额外的步骤才能在 NodeJS 中使用自签名证书:
- 已安装并受信任的开发证书
- 将
NODE_TLS_REJECT_UNAUTHORIZED
系统变量设为0 - 关闭并重新启动所有控制台