首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核心Web未定义/swagger/MyApp v1/swagger.json获取错误

ASP.NET核心Web未定义/swagger/MyApp v1/swagger.json获取错误
EN

Stack Overflow用户
提问于 2021-12-24 09:41:38
回答 1查看 692关注 0票数 0

我开发了ASP.NET Core-5 Web,并在其中实现了Swagger:

startup.cs:

代码语言:javascript
复制
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddVersioning();
        services.AddSwagger();
        ...
    }


    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, IApiVersionDescriptionProvider provider,)
    {
        app.UseDeveloperExceptionPage();
        app.UseStatusCodePagesWithReExecute("/errors/{0}");
        app.UseVersionedSwagger(provider);
    ...
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
               name: "default",
               pattern: "{controller}/{action=Index}/{id?}");
        });
    }

狂妄自大:

代码语言:javascript
复制
    public static IServiceCollection AddVersioning(this IServiceCollection services)
    {
        services.AddApiVersioning(
            options =>
            {
                options.ReportApiVersions = true;
            });
        services.AddVersionedApiExplorer(
            options =>
            {
                options.GroupNameFormat = "'MyApp API v'VVV";

                options.SubstituteApiVersionInUrl = true;
            });

        return services;
    }


    public static IServiceCollection AddSwagger(this IServiceCollection services)
    {
        services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();

        services.AddSwaggerGen(options =>
        {
            options.OperationFilter<SwaggerDefaultValues>();

            options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
            {
                Scheme = "Bearer",
                Description = @"JWT Authorization header using the Bearer scheme. <br><br> 
                  Enter 'Bearer' [space] and then your token in the text input below.
                  <br><br>Example: 'Bearer 12345abcdef'",
                Name = "Authorization",
                In = ParameterLocation.Header,
                Type = SecuritySchemeType.Http
            });

            options.OperationFilter<SwaggerAuthorizeCheckOperationFilter>();

            // integrate xml comments
            options.IncludeXmlComments(XmlCommentsFilePath);
        });

        return services;
    }


    public static IApplicationBuilder UseVersionedSwagger(this IApplicationBuilder app, IApiVersionDescriptionProvider provider)
    {
        app.UseSwagger();

        app.UseSwaggerUI(
            options =>
            {
                // build a swagger endpoint for each discovered API version
                foreach (var description in provider.ApiVersionDescriptions)
                {
                    options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
                }
            });

        return app;
    }

在本地系统上一切正常,但是当我部署到远程服务器上的IIS时。

然后我试着测试:

https://localhost:8443/myapp/

给予:

未找到网址:https://localhost:8443/myapp/的网页

https://localhost:8443/myapp/swagger/index.html

给予:

我发现了一个错误:

获取错误未定义/swagger/MyApp v1/swagger.json

我该怎么解决这个问题?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-12-27 02:50:27

尝试在startup.cs文件中的配置方法中添加以下代码:

代码语言:javascript
复制
if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger(c =>
        {
            c.RouteTemplate = "/swagger/{documentName}/swagger.json";
        });
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1"));
    }

然后在ConfigureServices方法中添加以下代码:

代码语言:javascript
复制
services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
        c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
    });

这里使用RouteTemplate,它和SwaggerEndpoint字符串之间的区别。一个使用{documentName},另一个使用"v1“作为文本。

具体参考文件:

https://www.thecodebuzz.com/resolved-failed-to-load-api-definition-undefined-swagger-v1-swagger-json/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70471540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档