当前位置:首页 > 技术 > 正文内容

ASP.NET Core Web API集成Swagger完全指南

访客 技术 2026年7月1日 1

引言

在使用ASP.NET Core开发Web API项目时,API文档的编写和维护是一项繁琐的工作。许多开发者在完成接口开发后,需要手动编写详细的接口说明文档,这种方式不仅效率低下,而且容易出现文档与实际接口不同步的问题。

幸运的是,Swagger作为最流行的REST API文档生成工具,能够帮助开发者自动生成交互式的API文档。本文将详细介绍如何在ASP.NET Core项目中集成Swagger。

为什么选择Swagger

Swagger作为API文档解决方案具有以下优势:

  • 交互式控制台:提供可视化的API测试界面,开发者可以直接在浏览器中测试接口
  • 多语言SDK生成:支持为各种平台自动生成客户端代码
  • 自动化文档生成:从代码注释中自动提取文档内容
  • 强大的社区支持:拥有活跃的开发者社区和丰富的插件生态

Swagger实现方案对比

在ASP.NET Core中,主要有两种Swagger集成方案:

Swashbuckle.AspNetCore:开源项目,专门用于为ASP.NET Core Web API生成Swagger文档。

NSwag:另一个优秀的开源项目,除了提供Swagger UI集成外,还支持自动生成C#和TypeScript客户端代码。

本文以Swashbuckle.AspNetCore为例进行演示。

Swashbuckle组件介绍

Swashbuckle由三个核心组件构成:

  • Swashbuckle.AspNetCore.Swagger:Swagger对象模型和中间件,将SwaggerDocument对象暴露为JSON端点
  • Swashbuckle.AspNetCore.SwaggerGen:从路由、控制器和模型直接生成SwaggerDocument对象
  • Swashbuckle.AspNetCore.SwaggerUI:嵌入式Swagger UI工具包,构建可定制的API文档界面

安装Swashbuckle

方式一:使用程序包管理器控制台

Install-Package Swashbuckle.AspNetCore

方式二:使用NuGet包管理器

在解决方案资源管理器中右键单击项目 → 管理NuGet程序包 → 搜索"Swashbuckle.AspNetCore" → 安装。

配置Swagger中间件

首先,在Startup.cs文件中引入必要的命名空间:

using Swashbuckle.AspNetCore.Swagger;

在ConfigureServices方法中注册Swagger生成器:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Info 
        { 
            Title = "My API", 
            Version = "v1" 
        });
    });
    
    services.AddMvc();
}

在Configure方法中启用Swagger中间件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
        });
    }
    
    app.UseMvc();
}

启动应用程序后,访问以下地址查看文档:

  • JSON文档:http://localhost:<port>/swagger/v1/swagger.json
  • Swagger UI:http://localhost:<port>/swagger

将Swagger UI设为启动页

如果希望在应用根路径直接显示Swagger UI,可以修改配置:

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    c.RoutePrefix = string.Empty;
});

高级配置

添加API元数据信息

可以在AddSwaggerGen方法中配置详细的API信息:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Info
    {
        Version = "v1",
        Title = "Product API",
        Description = "ASP.NET Core Web API Documentation",
        TermsOfService = "None",
        Contact = new Contact
        {
            Name = "API Support Team",
            Email = "support@example.com",
            Url = "https://example.com/support"
        },
        License = new License
        {
            Name = "MIT License",
            Url = "https://example.com/license"
        }
    });
});

为接口方法添加注释

首先,在控制器方法上添加XML文档注释:

/// <summary>
/// 获取所有产品列表
/// </summary>
/// <returns>返回产品集合</returns>
[HttpGet]
public ActionResult< IEnumerable<Product> > Get()
{
    return Ok(_products);
}

然后启用XML注释支持。右键单击项目 → 属性 → 生成选项卡 → 勾选"XML文档文件"。

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Info
    {
        Version = "v1",
        Title = "Product API",
        Description = "ASP.NET Core Web API Documentation"
    });
    
    var basePath = AppContext.BaseDirectory;
    var xmlPath = Path.Combine(basePath, "ProductApi.xml");
    c.IncludeXmlComments(xmlPath);
});

添加remarks元素可以提供更详细的说明:

/// <summary>
/// 根据ID获取产品详情
/// </summary>
/// <remarks>
/// 示例请求:
/// GET /api/products/1
/// </remarks>
/// <param name="id">产品ID</param>
/// <returns>产品详细信息</returns>
[HttpGet("{id}")]
public ActionResult<Product> Get(int id)
{
    var product = _products.FirstOrDefault(p => p.Id == id);
    if (product == null)
        return NotFound();
    
    return Ok(product);
}

描述响应类型

使用ProducesResponseType特性可以明确声明接口的响应类型:

/// <summary>
/// 创建新产品
/// </summary>
/// <param name="product">产品对象</param>
/// <returns>创建的产品</returns>
/// <response code="201">产品创建成功</response>
/// <response code="400">请求参数无效</response>
[HttpPost]
[ProducesResponseType(201)]
[ProducesResponseType(400)]
public ActionResult<Product> Post([FromBody] Product product)
{
    product.Id = _products.Max(p => p.Id) + 1;
    _products.Add(product);
    
    return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
}

使用Swagger UI测试接口

Swagger UI提供了便捷的在线测试功能:

  1. 在Swagger UI页面中找到需要测试的接口
  2. 点击接口右侧的"Try it out"按钮
  3. 填写请求参数
  4. 点击"Execute"按钮执行请求
  5. 查看Response区域显示的响应结果

总结

本文详细介绍了在ASP.NET Core Web API中集成Swagger的完整流程,包括基础配置、XML注释支持、响应类型描述等高级功能。通过Swagger,开发者可以快速生成规范且可交互的API文档,极大地提高了开发效率和API的可维护性。

标签: aspnetcore

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。