Swagger UI 未在 azure .net 核心中生成,但在本地工作

Posted

技术标签:

【中文标题】Swagger UI 未在 azure .net 核心中生成,但在本地工作【英文标题】:Swagger UI not generating in azure .net core but it is working in local 【发布时间】:2019-12-31 14:23:51 【问题描述】:

在 azure 中部署时,Swagger UI 未在 .net 核心应用程序中创建,但在本地运行良好

我已经添加了这个

startup.cs 中的ConfigureServices(IServiceCollection services) 方法

services.AddSwaggerGen(c =>

c.SwaggerDoc("v1", new Info

Version = "v1",
Title = "API",
Description = "API"
);
);

app.UseSwagger();
app.UseSwaggerUI(c =>

  c.SwaggerEndpoint("/swagger/v1/swagger.json", "API");
  c.RoutePrefix = "swagger";
);
app.UseAuthentication();

env.ConfigureNLog("nlog.config");
loggerFactory.AddNLog();

app.UseSignalR(routes =>

  routes.MapHub<DashboardHub>("/hubs/dashboard");
);

app.UseMvc(routes =>

   routes.MapRoute(
   name: "default",
   template: "controller/action=Index/id?");
);

app.UseSpa(spa =>

    spa.Options.SourcePath = "ClientApp";

    if (env.IsDevelopment())
    
         spa.UseReactDevelopmentServer(npmScript: "start");
    
);

在配置中(IApplicationBuilder 应用程序、IHostingEnvironment env、ILoggerFactory loggerFactory)

【问题讨论】:

您遇到了哪个错误?你是怎么得到它的? 没有出现错误,并且路径 baseurl/swagger/v1/swagger.json 中没有生成 json 文件 你试过c.RoutePrefix = string.empty吗? @SWilko 尝试使用 c.RoutePrefix = string.Empty ,但同样的问题没有获取 UI 页面。这是由于 azure 中的任何配置造成的吗? 【参考方案1】:

确保代码不在 IF 条件中 (env.IsDevelopment())。 这就是为什么只在本地主机上工作的原因。这样可以避免在生产时间工作。

像例子一样取出swagger初始化。

            if (env.IsDevelopment())
        
            app.UseDeveloperExceptionPage();

            // NOT HERE

        

        // Enable middleware to serve generated Swagger as a JSON endpoint.  
        app.UseSwagger();

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

【讨论】:

这对我有用。现在我可以在我的 Azure 子域上看到我的 swagger.json 文件,而不仅仅是在本地。我想知道为什么只在本地设置默认值。 谢谢它的工作。但是你能简单解释一下为什么 env.IsDevelopment() 不正确吗?环境变量 ASPNETCORE_ENVIRONMENT 是 Development。【参考方案2】:

有几件事要看:

请确保您使用的是正确且升级的稳定版本, 您可以参考下面的截图进行验证:

使用 http://www.test-cors.org 网站验证 CORS 支持。请记住,即使 Access-Control-Allow-Headers 不可用,这也会显示成功的结果,这仍然是 Swagger UI 正常运行所必需的。

请确保您已跟进以下文档,以使用 dot net core 配置 swagger。

https://github.com/domaindrivendev/Swashbuckle.AspNetCore#swashbuckleaspnetcoreswaggerui

如果仍然没有帮助,请提供代码仓库,将进一步帮助您。

注意:swagger-ui-react 是 Swagger UI,封装为 React 组件,用于 React 应用程序。

您也可以在这里浏览一些示例:

https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/test/WebSites/NetCore3/Startup.cs

希望对你有帮助。

【讨论】:

以上是关于Swagger UI 未在 azure .net 核心中生成,但在本地工作的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.1 Web API(版本控制)和 Swagger UI 在发布到 Azure 后由于 MvcJsonOptions 而失败

Rack-cors 未在 swagger-ui_rails 的生产环境中显示标题

Swagger UI 未在 index.html 页面上显示任何内容

drf-yasg:图像字段未在 swagger ui 中显示

Azure Functions 和 Swagger UI - 如何在 swagger UI 中显示查询字符串参数?

当试图打开Swagger-UI时只获得一个json Response