【问题标题】:Microsoft.OpenApi.Models.OpenApiDocument.SerializeAsV2 Invalid URI: The format of the URI could not be determinedMicrosoft.OpenApi.Models.OpenApiDocument.SerializeAsV2 无效 URI:无法确定 URI 的格式
【发布时间】:2020-03-23 12:47:23
【问题描述】:

我正在将我的 API 从 .netcore 2.1 升级到 3.1

API 使用SwagerUIAutorest 生成客户端。

this question about Autorest发现需要用到:

app.UseSwagger(c =>
{
    c.SerializeAsV2 = true;
});

但是,用户界面给出:

Fetch error
Internal Server Error v1/swagger.json

JSON 是:

{
  "StatusCode": 500,
  "ErrorMessage": "Internal server error: Invalid URI: The format of the URI could not be determined. nStack:
    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
    at Microsoft.OpenApi.Models.OpenApiDocument.WriteHostInfoV2(IOpenApiWriter writer, IList`1 servers)
    at Microsoft.OpenApi.Models.OpenApiDocument.SerializeAsV2(IOpenApiWriter writer)
    at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.RespondWithSwaggerJson(HttpResponse response, OpenApiDocument swagger)
    at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
    at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)",
  "SystemMessage": "Invalid URI: The format of the URI could not be determined."
}

[更新]

我发现提到它here

c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
{
    swaggerDoc.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}{pathPrefix}" } };
});

现在 JSON 显示:

{
  "StatusCode": 500,
  "ErrorMessage": "Internal server error: Invalid URI: Invalid port specified. Stack:
    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
    at Microsoft.OpenApi.Models.OpenApiDocument.WriteHostInfoV2(IOpenApiWriter writer, IList`1 servers)
    at Microsoft.OpenApi.Models.OpenApiDocument.SerializeAsV2(IOpenApiWriter writer)
    at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.RespondWithSwaggerJson(HttpResponse response, OpenApiDocument swagger)
    at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
    at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)",
  "SystemMessage": "Invalid URI: Invalid port specified."
}

【问题讨论】:

标签: c# swagger-ui swashbuckle.aspnetcore autorest


【解决方案1】:

以下工作

        var basePath = "/v1";
        app.UseSwagger(c =>
        {
            c.RouteTemplate = "swagger/{documentName}/swagger.json";
            c.SerializeAsV2 = true;
            c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
            {
                swaggerDoc.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}{basePath}" } };
            });

        });

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2013-12-15
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
相关资源
最近更新 更多