AspNetCore Swagger / Swashbuckle和虚拟目录

时间:2018-03-23 17:50:39

标签: asp.net-core swagger swashbuckle

我正在努力在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文件,因为它总是尝试在服务器根目录中找到它。

有人能指出我正确的方向吗?

2 个答案:

答案 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/