NSwag:IIS上找不到404 /swagger/v1/swagger.json

时间:2019-03-07 22:06:28

标签: swagger asp.net-core-webapi asp.net-core-2.1 nswag

我有一个基本的asp.net core 2.1 Web API。我安装了NSwag.ASPNetCore nuget软件包。

这是我的startup.cs。当我在IIS Express上运行此程序时,swagger运行正常。 将其部署到IIS后,找不到404。 我需要在某处添加路径吗?

enter image description here

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
        {
            builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
        }));

        services.AddMvc();
        // Add framework services.
        services.AddMvc()
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
            }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        //Add Application Services
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddSwaggerDocument();

    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseCors("CorsPolicy");

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseSwagger();
        app.UseSwaggerUi3();
        app.UseMvc();
    }
}

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并且在这里找到了解决方案:NSwag Issue #1914 您需要做的是配置“转换为外部路径”:

app.UseSwaggerUi3(config =>
{
    config.TransformToExternalPath = (s, r) =>
    {
        string path = s.EndsWith("swagger.json") && !string.IsNullOrEmpty(r.PathBase)
            ? $"{r.PathBase}{s}"
            : s;
        return path;
    };
});

这对我的iisexpress和iis都有效。

答案 1 :(得分:0)

检查应用程序是否不使用Virtual Path。 Swagger默认检查绝对路径,而不是 localhost:port/MyVirtualPath/swagger/v1/swagger.json

当您将IIS服务器与虚拟路径定界符一起使用时,可能会发生这种情况。