1

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

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

在此处输入图像描述

    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();
    }
}
4

2 回答 2

1

正如 Rico 在下面提到的:升级到 nswag v13 应该可以解决问题(对我来说它有效)。

对于 v13 之前的 nswag 版本:

我遇到了同样的问题,在这里找到了解决方案: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 上对我有用。

于 2019-06-03T18:08:59.263 回答
0

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

当您使用带有虚拟路径分隔符的 IIS 服务器时,可能会发生这种情况。

于 2019-06-24T08:10:09.040 回答