swagger使用

本文详细介绍如何在ASP.NET Core项目中集成Swagger,包括安装、配置及汉化过程,实现API文档自动生成与功能测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发现一些文章

http://www.gpzy88.com/book/dotnetcore/index.html

# 第五章:webapi中增加swagger

 

###Swagger介绍

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

 

###Swagger作用:

 

1. 接口的文档在线自动生成。

 

2. 功能测试。

 

###项目引入Swagger

我这里安装的是VS2017, 当然 VS Code也是可以的。 Nuget安装Swagger的命令是:

Install-Package Swashbuckle.AspNetCore -Pre

 

注意:Nuget包管理添加时一定要注意选择的时候 选择 Swashbuckle.AspNetCore 默认的 Swashbuckle 不支持 asp.net core

 

基于asp.net core 的中间件机制, Swagger也需要加入到中间件服务的列表中, 这样才可以启用Swagger。在 Startup.cs 中的 ConfigureServices 跟 Configure 方法添加 Swagger 代码如下:

 

在 ConfigureServices中增加:

```

//配置跨域处理

services.AddCors(options =>

{

options.AddPolicy("any", builder =>

{

builder.AllowAnyOrigin() //允许任何来源的主机访问

.AllowAnyMethod()

.AllowAnyHeader()

.AllowCredentials(); //指定处理cookie

});

});

 

services.AddSwaggerGen(options =>

{

options.SwaggerDoc("v1", new Info

{

Version = "v1",

Title = "Book crawler API",

Description = "by xj"

});

// 为 Swagger JSON and UI设置xml文档注释路径

var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径)

var xmlPath = Path.Combine(basePath, "BookWebAPI.xml");

options.IncludeXmlComments(xmlPath);

 

});

 

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

var log = LogManager.GetLogger(repository.Name, typeof(Startup));

 

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

else

{

app.UseHsts();

}

 

app.UseHttpsRedirection();

app.UseMvc();

 

app.UseSwagger();

app.UseSwaggerUI(c =>

{

c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");

//c.DocExpansion("none");

});

}

 

```

### 修改项目配置,相关工程需要生成XML文档

这样配置了以后,就可以在swagger 中看到函数中注释了。

![Image text](./config.png)

 

###修改Web API项目首页重定向

根据需要,找到项目 Properties下的 launchSettings.json 文件,比如修改IIS Express节点下的launchUrl,将其改为下图中的值,这样启动时就重定向到指定的地址

 

###汉化 swagger

 

在Startup.cs 类方法 Configure 中启用 读取静态资源文件,并添加 UseSwaggerUI 读取js文件

```

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

 

app.UseMvc();

app.UseStaticFiles();

 

//配置Swagger

app.UseSwagger();

app.UseSwaggerUI(c =>

{

c.SwaggerEndpoint("/swagger/v1/swagger.json", "DemoAPI V1");

//加载汉化的js文件,注意 swagger.js文件属性必须设置为“嵌入的资源”。

c.InjectOnCompleteJavaScript("/Scripts/swagger.js");

});

}

```

###js文件源码:

```

'use strict';

 

/**

* Translator for documentation pages.

*

* To enable translation you should include one of language-files in your index.html

* after <script src='lang/translator.js' type='text/javascript'></script>.

* For example - <script src='lang/ru.js' type='text/javascript'></script>

*

* If you wish to translate some new texsts you should do two things:

* 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too.

* 2. Mark that text it templates this way <anyHtmlTag data-sw-translate>New Phrase</anyHtmlTag> or <anyHtmlTag data-sw-translate value='New Phrase'/>.

* The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate.

*

*/

window.SwaggerTranslator = {

_words: [],

 

translate: function () {

var $this = this;

$('[data-sw-translate]').each(function () {

$(this).html($this._tryTranslate($(this).html()));

$(this).val($this._tryTranslate($(this).val()));

$(this).attr('title', $this._tryTranslate($(this).attr('title')));

});

},

 

_tryTranslate: function (word) {

return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word;

},

 

learn: function (wordsMap) {

this._words = wordsMap;

}

};


 

/* jshint quotmark: double */

window.SwaggerTranslator.learn({

"Warning: Deprecated": "警告:已过时",

"Implementation Notes": "实现备注",

"Response Class": "响应类",

"Status": "状态",

"Parameters": "参数",

"Parameter": "参数",

"Value": "值",

"Description": "描述",

"Parameter Type": "参数类型",

"Data Type": "数据类型",

"Response Messages": "响应消息",

"HTTP Status Code": "HTTP状态码",

"Reason": "原因",

"Response Model": "响应模型",

"Request URL": "请求URL",

"Response Body": "响应体",

"Response Code": "响应码",

"Response Headers": "响应头",

"Hide Response": "隐藏响应",

"Headers": "头",

"Try it out!": "试一下!",

"Show/Hide": "显示/隐藏",

"List Operations": "显示操作",

"Expand Operations": "展开操作",

"Raw": "原始",

"can't parse JSON. Raw result": "无法解析JSON. 原始结果",

"Model Schema": "模型架构",

"Model": "模型",

"apply": "应用",

"Username": "用户名",

"Password": "密码",

"Terms of service": "服务条款",

"Created by": "创建者",

"See more at": "查看更多:",

"Contact the developer": "联系开发者",

"api version": "api版本",

"Response Content Type": "响应Content Type",

"fetching resource": "正在获取资源",

"fetching resource list": "正在获取资源列表",

"Explore": "浏览",

"Show Swagger Petstore Example Apis": "显示 Swagger Petstore 示例 Apis",

"Can't read from server. It may not have the appropriate access-control-origin settings.": "无法从服务器读取。可能没有正确设置access-control-origin。",

"Please specify the protocol for": "请指定协议:",

"Can't read swagger JSON from": "无法读取swagger JSON于",

"Finished Loading Resource Information. Rendering Swagger UI": "已加载资源信息。正在渲染Swagger UI",

"Unable to read api": "无法读取api",

"from path": "从路径",

"server returned": "服务器返回"

});


 

$(function () {

window.SwaggerTranslator.translate();

});

```

效果如图所示

![Image text](./show.png)

<think>好的,我现在需要回答用户关于如何使用Swagger创建API文档的问题。首先,我应该先整理用户提供的引用内容,看看里面有哪些关键点可以利用。引用1提到Swagger用于描述、创建和维护RESTful API文档,并提到了安装过程和交互式界面。引用2补充了Swagger是一个规范和框架,用于生成和可视化接口文档。引用3是关于在Asp.Net MVC Web API中使用Swagger的步骤,包括创建项目和集成Swagger。引用4则详细介绍了使用Swagger 3的注解,比如@Tag和@Operation。 接下来,我需要按照用户的要求,结构清晰地分步骤说明。用户希望看到教程式的回答,所以应该从安装开始,然后逐步讲解配置、定义API、使用注解、生成文档、测试接口等步骤。要注意的是,用户示例中的代码块使用了Python,但引用3中的例子是Asp.Net,可能需要调整语言环境,但用户可能希望看到通用步骤,或者具体某个框架的步骤? 根据引用3和4,用户可能对如何在不同的环境中使用Swagger感兴趣,比如在Asp.Net中使用,或者在Spring Boot中使用注解。所以可能需要分环境来说明,或者先给出通用步骤,再提供不同框架的例子。不过用户的问题比较广泛,可能更适合一般性的步骤,然后补充不同框架的示例。 另外,用户提到要生成相关问题,所以最后需要提出几个相关问题,比如安装步骤、与OpenAPI的关系、注解的作用等。 需要注意的是,必须使用中文回答,数学公式用$...$,独立公式用$$...$$,但这个问题可能不涉及数学公式,所以可能不需要。另外要正确使用LaTeX语法,但同样这里可能用不上。需要检查是否有变量或代码需要正确格式化。 可能的结构: 1. 安装Swagger工具 2. 配置Swagger(根据框架不同) 3. 定义API端点 4. 添加注解描述API 5. 生成和访问文档 6. 测试API 每个步骤中引用相应的引用内容,比如在配置部分提到引用3的Asp.Net步骤,在注解部分引用4的@Tag和@Operation。最后的问题需要涵盖教程中的各个部分,比如优化文档、测试方法、版本控制等。 现在需要确保每个步骤都清晰,并且引用正确的来源。例如,在提到使用Swagger UI时,引用1和2都提到了交互式界面,可以标注引用1和2。在注解部分,引用4详细说明了注解的使用,所以需要标注引用4。对于Asp.Net的具体步骤,引用3提供了创建项目和集成的步骤,所以需要标注引用3。 还需要注意,用户的问题是如何使用Swagger创建API文档,所以可能需要涵盖Swagger的不同使用方式,比如通过代码注解自动生成,或者手动编写YAML文件。根据引用内容,引用3和4更偏向于代码注解的方式,而引用1和2可能更偏向于整体描述。 总结回答结构: - 简介Swagger的作用 - 分步骤教程,包括安装、配置、定义API、添加注解、生成文档、测试 - 不同框架的示例(如Spring Boot和Asp.Net) - 相关问题 现在开始组织内容,确保每个部分都有对应的引用标注,并且语言自然,结构清晰。例如,步骤1安装Swagger可能包括使用npm安装Swagger CLI或者在Maven中添加依赖,根据不同的工具链。步骤2配置可能是在项目中启用Swagger,比如在Spring Boot中使用@EnableSwagger2,或者在Asp.Net中添加Swashbuckle包。步骤3定义API端点是编写控制器方法。步骤4添加注解如@Tag、@Operation等。步骤5生成文档后访问Swagger UI,步骤6测试接口。 需要检查每个步骤是否有对应的引用支持,比如在Asp.Net的配置步骤引用3,注解部分引用4,交互式界面引用1和2。 最后,生成的相关问题应该覆盖教程中提到的不同方面,比如安装、注解使用、测试、版本控制等。</think>### 如何使用 Swagger 创建 API 文档 Swagger 是一套用于设计、构建和文档化 RESTful API 的工具集,支持通过代码注解或 YAML 文件自动生成交互式文档。以下是详细步骤: --- #### 1. **安装 Swagger 工具** 根据开发环境选择安装方式: - **Node.js 项目**:使用 Swagger CLI 工具 ```bash npm install -g swagger-cli ``` - **Java/Spring Boot**:通过 Maven 引入依赖 ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> </dependency> ``` - **.NET 项目**:通过 NuGet 安装 `Swashbuckle.AspNetCore`[^3]。 --- #### 2. **配置 Swagger** 在项目中启用 Swagger 并定义基本配置: - **Spring Boot**:添加 `@EnableSwagger2` 注解到主类,并配置 Docket Bean[^2]。 ```java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } } ``` - **.NET**:在 `Startup.cs` 中注册 Swagger 服务[^3]: ```csharp services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); }); ``` --- #### 3. **定义 API 端点** 在控制器中编写 API 方法,例如 Spring Boot 示例: ```java @RestController @RequestMapping("/api/users") @Tag(name = "用户管理", description = "用户相关操作") // 引用[^4] public class UserController { @GetMapping("/{id}") @Operation(summary = "获取用户信息", description = "根据ID查询用户") public User getUser(@PathVariable Long id) { // 实现逻辑 } } ``` --- #### 4. **添加注解描述 API** 使用 Swagger 注解增强文档可读性: - `@Tag`:为 API 分组(如“用户管理”)。 - `@Operation`:描述接口功能。 - `@ApiResponse`:定义响应状态码和说明。 - **示例**: ```java @PostMapping @Operation(summary = "创建用户", description = "提交用户信息并保存") @ApiResponse(responseCode = "201", description = "用户创建成功") public ResponseEntity<User> createUser(@RequestBody User user) { // 实现逻辑 } ``` --- #### 5. **生成并访问文档** 启动项目后,通过以下 URL 访问交互式文档: - **默认路径**:`http://localhost:8080/swagger-ui.html`(Spring Boot) `http://localhost:<port>/swagger`(.NET) 文档将展示所有 API 端点、请求参数和响应模型。 --- #### 6. **在线测试 API** 在 Swagger UI 中直接发送请求并查看结果: ![Swagger 测试界面示例](https://example.com/swagger-ui-screenshot.png) 支持修改参数并实时验证功能[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值