我正在努力在Asp.Net核心2.0 web api中使Swagger / Swashbuckle的配置正确。我已经按照这些示例进行操作,这些示例在根文件夹/ localhost中工作时都非常出色。正如许多其他人所指出的那样,在服务器上的虚拟文件夹中工作时,我也会看到不同的行为。我已经研究了这个问题 - IIS site within virtual directory Swagger UI end point这个问题类似,但是那里提供的解决方案没有用。
我的startup.cs文件包含以下用于配置服务的块:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddSwaggerGen(c =>
{
c.DescribeAllEnumsAsStrings();
c.IncludeXmlComments(string.Format(@"{0}\EmployeeService.xml", System.AppDomain.CurrentDomain.BaseDirectory));
c.SwaggerDoc("v1", new Info
{
Version = "v1",
Title = "Employee Service"
});
});
...
}
我的Configure方法如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Employee Service API");
});
app.UseMvc();
}
我已经尝试过,无需将RoutePrefix添加到SwaggerUI部分。
正如我所提到的,我正在运行.Net Core 2.0.3,我引用了Nuget包Swashbuckle.AspNetCore 2.3.0。
当我尝试访问{server} / {virtualdirectory} / swagger时,无论我对路径做什么,我在应用程序中获得的是/swagger/v1/swagger.json文件中的404。 UI加载,但它不会加载json文件,因为它总是尝试在服务器根目录中找到它。
有人能指出我正确的方向吗?
答案 0 :(得分:0)
您必须检查[http]路由,请勿在http`标记前使用[routes]。
您必须在顶部添加一个api路由,并删除它们之前的所有路由Http:
[Route("api/[controller]")]
public class asteriskAPI:Controller
{ ........
}
并这样:
[HttpGet]
public ActionResult<List<ast_cel>> GetAll()
{
...
}
答案 1 :(得分:0)
您需要将应用程序更改为UseSwaggerUI方法
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./swagger/v1/swagger.json", "Employee Service API");
});
记下时间段。
来源:https://docs.microsoft.com/en-us/samples/aspnet/aspnetcore.docs/getstarted-swashbuckle-aspnetcore/