不为从基类继承的控制器生成swagger.json

时间:2019-08-13 14:23:52

标签: swagger asp.net-core-2.1

在我的net core api应用程序中,所有控制器都继承自基本控制器。

因此,大摇大摆不起作用。

我使用Visual Studio创建了一个示例项目,并且敏捷地工作正常

但是,当我创建一个从ControllerBase继承的基类(Test.cs),并且将ValuesController.cs更改为从Test而不是ControllerBase继承时,大摇大摆不起作用。

我得到了错误

无法加载API定义。 提取错误未定义的/swagger/v1/swagger.json

谢谢您的帮助!

这是我的代码:

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "Test", Version = "v1" });
            var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.XML";
            var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
            c.IncludeXmlComments(xmlPath);
        });
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();

        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("swagger.json", "Test");        
        });
    }

Test.cs

using Microsoft.AspNetCore.Mvc;

namespace WebApplication6.Controllers
{
    public class Test : ControllerBase
    {
        public void MyTest()
        {
        }
    }
}

ValuesController.cs

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication6.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    // This works
    // public class ValuesController : ControllerBase

    // This doesn't works
    public class ValuesController : Test
    {
        /// <summary>
        /// Test
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我解决了更改基类Test.cs的问题

public void MyTest()

protected void MyTest()