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 中显示