NET核心3.1 Web API的Swagger页面未显示为IIS中的启动页面

时间:2020-07-03 14:30:02

标签: iis swagger-ui .net-core-3.1 swashbuckle.aspnetcore

我已经在IIS的“默认网站”下发布了Web API应用程序(.Net Core 3.1)。 我已按照所有必要步骤在IIS上托管.net核心应用程序。 使用邮递员工具,我检查了所有API是否正常工作。

我想从IIS浏览API后将Swagger UI页面显示为启动页面。 每当我单击[browse:XXX:XXX:XXX:XXX:443(https)]链接时,就会从IIS中显示找不到此XXX.XXX.XXX.XXX页面

浏览器网址:https://https/XXX.XXX.XXX.XXX/API

注意:如果我在上述网址的末尾添加了“ /”,那么它将自动重定向到swagger的Index.html页面。

我现有的摇摇欲坠的源代码

public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1.0.0", new Microsoft.OpenApi.Models.OpenApiInfo
        {
            Title = "TestAPI",
            Version = "v1.0.0",
            Description = "Test API"
        });

        // Set the comments path for the Swagger JSON and UI.
        var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
        var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
        c.IncludeXmlComments(xmlPath);
    });
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   app.UseSwagger();
   app.UseSwaggerUI(c =>
   {
      c.SwaggerEndpoint("./swagger/v1.0.0/swagger.json", "TestAPI V1.0.0");
      c.RoutePrefix = "";
   });
}

在IIS中,我已通过名称(API)添加了应用程序。 从IIS访问后,我想将大张旗鼓的Index.html页面显示为默认页面。

我不明白代码级别上是否缺少任何内容,或者需要在IIS上进行任何设置以显示默认的摇摇欲坠页面。

其他信息:

Swagger软件包:Swashbuckle.AspNeteCore(5.3.1)

OS:Windoes 10

IIS:10.0.19041.1

注意:我在IIS上以NewWebSite(不在默认网站上)发布了相同的API,然后可以按预期使用。

3 个答案:

答案 0 :(得分:1)

就我而言,Swagger 正在工作,但只是没有显示为启动页面。在 launchsettings.json 中的配置文件下添加 "launchUrl": "swagger" 对我有用。

{ 
  "iisSettings": {
    ...
  },
  "profiles": {
    "IIS Express": {
    "commandName": "IISExpress",
    "launchBrowser": true,
    "launchUrl": "swagger",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
  ...
}

答案 1 :(得分:0)

基本上,您所做的一切足以配置Swagger UI扩展名。
在为Swagger JSON文件设置以下代码段之后,网站的基址将显示Swagger索引页。

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    c.RoutePrefix = string.Empty;
});

同时,当我们配置XML注释路径时,可以正确生成Swagger.json文件。

var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);

官方教程。
https://docs.microsoft.com/en-us/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-3.1&tabs=visual-studio
IIS配置可能有问题。在我这方面,默认网站和新网站都可以正常工作。我怀疑您的默认网站中是否存在某些URL规则。请检查默认网站的URL重写扩展名下是否存在URL规则。
此外,在删除一些URL规则后,请清除本地浏览器缓存,或在浏览器的私有窗口中进行验证。
随时让我知道问题是否仍然存在。

答案 2 :(得分:0)

这个设置对我有用。

app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("v1/swagger.json", "My Api v1");
});