首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swagger文档有空路径

Swagger文档有空路径
EN

Stack Overflow用户
提问于 2021-01-14 15:14:52
回答 2查看 1.7K关注 0票数 1

我的Swagger文档没有正确生成,我有基本信息(标题、名称、许可证等),但我的路线上没有文档。

下面是Startup.cs中的设置:

代码语言:javascript
运行
复制
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<APIContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddControllersWithViews();
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo
            {
                Version = "v1",
                Title = "OpenWeb Challenge",
                Description = "A 'simple' example ASP.NET Core Web API",
                TermsOfService = new Uri("https://example.com/terms"),
                Contact = new OpenApiContact
                {
                    Name = "Anthony Da Silva Ferreira",
                    Email = string.Empty,
                    Url = new Uri("https://twitter.com/spboyer"),
                }
            });

            var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
            var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
            c.IncludeXmlComments(xmlPath);
        });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "OpenWebChallenge V1");
        });
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }

以及自夸的内容:

代码语言:javascript
运行
复制
{
  "openapi": "3.0.1",
  "info": {
    "title": "OpenWeb Challenge",
    "description": "A 'simple' example ASP.NET Core Web API",
    "termsOfService": "https://example.com/terms",
    "contact": {
      "name": "Anthony Da Silva Ferreira",
      "url": "https://twitter.com/spboyer",
      "email": ""
    },
    "license": {
      "name": "Licence",
      "url": "https://example.com/license"
    },
    "version": "v1"
  },
  "paths": { },
  "components": { }
}

控制器样本:

代码语言:javascript
运行
复制
public class ContactsController : Controller
{
    private readonly APIContext _context;

    public ContactsController(APIContext context)
    {
        _context = context;
    }

    // GET: Contacts
    public async Task<IActionResult> Index()
    {
        return View(await _context.Contacts.ToListAsync());
    }

    // GET: Contacts/Details/5
    public async Task<IActionResult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var contact = await _context.Contacts
            .Include(c => c.ContactSkills)
                .ThenInclude(cs => cs.Skill)
            .AsNoTracking()
            .FirstOrDefaultAsync(m => m.Id == id);

        if (contact == null)
        {
            return NotFound();
        }

        return View(contact);
    }
}

我是不是漏掉了什么配置什么的?这是我第一次从头开始创建API。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-14 15:34:35

您将PropertyGroup添加到PROJECT_NAME.csproj文件了吗?

代码语言:javascript
运行
复制
<PropertyGroup>
   <GenerateDocumentationFile>true</GenerateDocumentationFile>
   <NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>

没有它,编译器将不会生成文档文件。

Microsoft文档

编辑

在文档中,它说:“您必须为您想要在Swagger文档中表示的任何控制器使用属性路由”链接。因此,对于您的控制器,它将是:

代码语言:javascript
运行
复制
[Route("api/contacts")]
public class ContactsController : Controller
{
...

    // GET: Contacts
    [HttpGet("")]
    public async Task<IActionResult> Index()
    {
    ...
    }

    // GET: Contacts/Details/5
    [HttpGet("/details/{id?}")]
    public async Task<IActionResult> Details([FromRoute] int? id)
    {
        ...
    }
}

编辑

我使用了错误的路由模板语法:

代码语言:javascript
运行
复制
[HttpGet("/details/:id?")] -> [HttpGet("/details/{id?}")]

?可选参数

票数 1
EN

Stack Overflow用户

发布于 2021-01-20 06:17:39

从您的代码来看,ContactsController看起来像是一个MVC控制器(它将返回视图),而不是API控制器。

摇摆者(OpenAPI)是一种语言无关的规范,用于描述REST ,而不是MVC控制器.因此,它不会为MVC控制器生成Swagger文档。尝试添加一个API控制器,然后,使用Swagger添加API信息和描述。

有关使用Swagger的详细信息,请检查开始使用Swashbuckle和ASP.NET核心

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

https://stackoverflow.com/questions/65721666

复制
相关文章

相似问题

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