gpt4 book ai didi

c# - Azure 的 Swagger 配置与 localhost 的配置不同

转载 作者:行者123 更新时间:2023-12-03 06:06:30 28 4
gpt4 key购买 nike

我注意到配置 swagger 使其适用于 localhost build 和 azure 的唯一方法是按以下方式配置它:

app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(x =>
{

// For Debug in Kestrel
x.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");
#if DEBUG
x.RoutePrefix = "swagger"; // For localhost
#else
x.RoutePrefix = string.Empty; // For azure
#endif
}
);

有人知道为什么 Azure 和 localhost 的 RoutePrifix 必须不同吗?

更新:

如果我使用这样的配置:

// generated swagger json and swagger ui middleware
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(x =>
{
// For Debug in Kestrel
x.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");
x.RoutePrefix = "swagger";
}
);

在本地计算机上运行它没有问题,并且它会在启动时使用正确的 swagger UI 页面启动浏览器。

但是,如果我发布我的应用程序(在 Visual Studio 2022 中),该过程将从构建显示此页面的浏览器结束时开始: enter image description here

我不明白为什么它不在 URL 中插入 swagger 单词 - 因此它会出现一个错误页面。

最佳答案

x.RoutePrefix 属性用于指定 ASP.NET Core 应用程序中 Swagger UI 的基本 URL。

本地:

  • 如果应用程序在本地主机上运行时使用 x.RoutePrefix = "swagger",则 Swagger UI 将在 https://localhost:5001/swagger 处可用
  • Swagger UI 使用您传递给 SwaggerEndpoint 的 URL 来检索 API 的元数据。
  • 通过提及 RoutePrefix = "swagger" 的默认值 SwaggerUI middleware,我们指的是 Swagger 端点在 swagger/v1/swagger.json 处可用。

enter image description here

当应用程序部署到 Azure 时, x.RoutePrefix 设置为 string.empty ,因为应用程序托管在根 URL 上,并且可以通过 https://<app-name>.azurewebsites.net/swagger 访问 Swagger UI

enter image description here

我还尝试了其他一些情况:

  1. 仅使用 x.RoutePrefix = string.Empty;:

如果我们在本地运行应用程序时使用空字符串,则可以通过导航到 https://localhost:<port>/index.html 本地Azure 中的 https://<app-name>.azurewebsites.net/swagger 来访问 Swagger UI/strong>

app.UseSwaggerUI(x =>
{
x.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");
x.RoutePrefix = string.Empty; // For azure
}
);

本地:

enter image description here

azure :

enter image description here

  • 仅使用 x.RoutePrefix = "swagger";:
  • 如果我们在代码中使用swagger作为RoutePrefix,则可以通过导航到https://localhost:<port>/swagger/index.html来访问Swagger UI 本地https://<app-name>.azurewebsites.net/swagger/index.html

    app.UseSwaggerUI(x =>
    {
    x.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");
    x.RoutePrefix = "swagger";
    }
    );

    本地:

    enter image description here

    azure :

    enter image description here

    关于c# - Azure 的 Swagger 配置与 localhost 的配置不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77261951/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com