托管到本地IIS

时间:2017-07-21 14:31:55

标签: asp.net asp.net-core swagger swagger-ui asp.net-core-webapi

托管我的asp.net核心1.2应用程序后,我收到错误:

  

swagger无法找到swagger.json文件。

我尝试通过提供虚拟路径名app.UseSwaggerUI()来解决问题,但它无效。

编辑以根据评论澄清问题:

在IIS中托管Asp.net核心应用程序后,swagger.json文件正在localhost:<random_port>/swagger/v1/swagger.json路径上生成。

如何在自定义路线上提供swagger.json文件,例如: localhost:<random_port>/virtualpathname/swagger/v1/swagger.json

我试图在app.UseSwaggerUI()中设置一个虚拟路径,例如{virtualpathname}/swagger/v2/swagger.json,但它仍无法正常工作

4 个答案:

答案 0 :(得分:1)

可能有几个原因 - 一个是.Net Core默认不提供静态文件(虽然查看在线示例这似乎不是问题)。

如果您还没有,请尝试使用以下配置在Microsoft.AspNetCore.StaticFiles UseStaticFiles()方法中安装软件包Configure()并添加Startup.cs。我不认为订单很重要,但这是我在一个正在运行的应用程序中运行的订单。

public void Configure(...)
{
  // Enable middleware to serve static files (like .json)
  app.UseStaticFiles();

  //Enable middleware for your API
  app.UseMvc();

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

  // Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
  app.UseSwaggerUI(c =>
  {
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "YourApp API V1");
  });
}

您还需要在SwaggerGen方法中配置ConfigureServices()个中间件。

services.AddSwaggerGen(c =>
{
  c.SwaggerDoc("v1", new Info { Title = "api_name", Version = "1.0"});
});

修改根据评论 - 在自定义路线上投放swagger json:

// Enable middleware to serve generated Swagger as a JSON endpoint on a custom endpoint
app.UseSwagger(c => c.RouteTemplate = "custom/swagger/{documentName}/swagger.json");

// Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
// Using custom endpoint defined above
app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("/custom/swagger/v1/swagger.json", "YourApp API V1");
});

如果您还需要在自定义路线上提供SwaggerUI,那么:

// Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
// Using custom endpoint defined above
// And serving UI on a custom route
app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("/custom/swagger/v1/swagger.json", "YourApp API V1");
  c.RoutePrefix = "custom"; // serves UI on http://{domain}:{port}/custom/
});

答案 1 :(得分:0)

我建议你执行接下来的两个步骤。

注意:第一步是为您提供有关您所面临的错误的更多详细信息。

答案 2 :(得分:0)

在我的情况下,问题是我通过添加相对路径(../)修复的虚拟目录。在任何情况下,请确保首先设置ConfigureServices,然后在配置时确保一切正常,UseSwagger应该在UseMvc之前,最后是UseSwaggerUI

32

答案 3 :(得分:0)

在startup.cs类上更改以下内容:

radviz(iris, 'species',None,color=sns.color_palette())

收件人

app.UseSwaggerUI(c =>
                {
                  c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyService.API v1");

                });

[MyWebsiteName]是在IIS中配置的应用程序的名称。