NSwag: 404 не найден /swagger/v1/swagger.json в IIS - PullRequest
1 голос
/ 08 марта 2019

У меня есть базовый веб-API asp.net core 2.1.Я установил пакет Nuget NSwag.ASPNetCore.

вот мой 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 ]

1 голос
/ 03 июня 2019

Как упомянуто Рико ниже: обновление до nswag v13 должно решить проблему (для меня это сработало).

Для версий nswag до v13:

У меня была такая же проблема, и янашел решение здесь: 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.

0 голосов
/ 24 июня 2019

Проверьте, не используете ли вы Virtual Path для приложения. Swagger по умолчанию проверяет абсолютный путь вместо localhost:port/MyVirtualPath/swagger/v1/swagger.json

Это может произойти при использовании сервера IIS с разделителем виртуального пути.

...