Asp.net core api swagger显示中文注释

news2024/12/23 19:49:55

在你的 Web API 项目中使用 Swagger 的.NET Core 封装 Swashbuckle 可以帮助你创建良好的文档和帮助页面,Swagger (OpenAPI) 是一个与语言无关的规范,用于描述 REST API。 它使计算机和用户无需直接访问源代码即可了解 REST API 的功能

1、OpenAPI 与 Swagger

Swagger 项目已于 2015 年捐赠给 OpenAPI 计划,自此它被称为 OpenAPI。 这两个名称可互换使用。 不过,“OpenAPI”指的是规范。 “Swagger”指的是来自使用 OpenAPI 规范的 SmartBear 的开放源代码和商业产品系列。

简而言之:

OpenAPI 是一种规范。

Swagger 是一种使用 OpenAPI 规范的工具。 例如,OpenAPIGenerator 和 SwaggerUI

OpenAPI 规范是描述 API 功能的文档。 该文档基于控制器和模型中的 XML 和属性注释。 它是 OpenAPI 流的核心部分,用于驱动诸如 SwaggerUI 之类的工具

2、Swagger UI

Swagger UI 提供了基于 Web 的 UI,它使用生成的 OpenAPI 规范提供有关服务的信息。 Swashbuckle 和 NSwag 均包含 Swagger UI 的嵌入式版本,因此可使用中间件注册调用将该嵌入式版本托管在 ASP.NET Core 应用中。 Web UI 如下所示:

3、开搞

打开启动vs2019,

启动项目,如图:

原来是英文的,我们要中文的,WeatherForecastController.cs是一个示例,删除即可,WeatherForecast.cs同时删除,当然不删除也行,这里是删除,创建自己的控制器

1创建model实体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace HouseSysWebApplication.Model
{
    ///<summary>
    /// 图片实体类
    /// </summary>
    public class Book
    {
        /// <summary>
        /// 编号
        /// </summary>
        public int id { get; set; }
        /// <summary>
        /// 书名
        /// </summary>
        public string title { get; set; }
        /// <summary>
        /// 作者
        /// </summary>
        public string author { get; set; }
        /// <summary>
        /// 价格
        /// </summary>
        public float price { get; set; }
        /// <summary>
        /// 图片地址
        /// </summary>
        public string image { get; set; }
    }
}

2 添加控制器BookController

Controller文件夹上右键,选择“添加”,选择“控制器”,选择API,

using HouseSysWebApplication.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace HouseSysWebApplication.Controllers
{
    /// <summary>
    /// 图书控制器
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class BookController : ControllerBase
    {
        List<Book> bookList = InitBookStore();
        private static List<Book> InitBookStore()
        {
            List<Book> bookList = new List<Book>();
            Book b1 = new Book();
            b1.id = 101;
            b1.author = "杨康";
            b1.title = "Java从入门到精通";
            b1.price = 89.5f;
            b1.image = "img01.jpg";
            bookList.Add(b1);
            Book b2 = new Book();
            b2.id = 102;
            b2.author = "天涯";
            b2.title = "Java项目开发实战入门";
            b2.price = 49.5f;
            b2.image = "img02.jpg";
            bookList.Add(b2);
            Book b3 = new Book();
            b3.id = 103;
            b3.author = "标贵";
            b3.title = "Java编程思想";
            b3.price = 76f;
            b3.image = "img03.jpg";
            bookList.Add(b3);
            Book b4 = new Book();
            b4.id = 104;
            b4.author = "西法";
            b4.title = "web开发手册";
            b4.price = 78.3f;
            b4.image = "img04.jpg";
            bookList.Add(b4);
            Book b5 = new Book();
            b5.id = 105;
            b5.author = "海风";
            b5.title = "唐诗宋词";
            b5.price = 29.5f;
            b5.image = "img05.jpg";
            bookList.Add(b5);
            return bookList;
        }
        /// <summary>
        /// 获取所有图书
        /// </summary>
        /// <returns>图书列表</returns>
        [HttpGet("all")]
        public List<Book> BookStore()
        {
            return bookList;
        }
        /// <summary>
        /// 查询指定名称的图书
        /// </summary>
        /// <param name="bookName">图书标题</param>
        /// <returns>图书列表</returns>
        [HttpGet("search")]
        public IEnumerable<Book> BookStore(string bookName)
        {
            return bookList.FindAll(x => x.title.Contains(bookName)).AsEnumerable();
        }
    }
}

这里要注意的是代码的完整注释要写上,既然是写接口,生成的文档所以要详细,可读性强,启动后效果

3 生成xml文档

项目右键,选择属性,点击生成,勾选

将项目编译生成,就会自动创建xml文档

4修改Startup.cs

只要改一个地方就行

title是标题,具体描述自己决定

5编译生成,启动,看效果,立马中文

选择某个接口,比如第一个,点击测试,没有问题,说明一切杠杠的

注释没有问题,相当的帅,单独访问也正常

6666,槟榔加烟,法力无边

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/389491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP定位离线库有什么作用?

IP离线是什么意思&#xff1f;我们以丢失手机为例来寻找它&#xff0c;现在手机都有IP定位功能&#xff0c;只要手机开通了IP定位&#xff0c;就能找到手机。iPhone定位显示离线一般是iPhone手机关机了或者iPhone手机中“查找我的iPhone”功能关闭了。如果手机在手中的话可以打…

【Spark】Spark的DataFrame向Impala写入数据异常及源码解析

背景 事情是这样的&#xff0c;当前业务有一个场景: 从业务库的Mysql抽取数据到Hive 由于运行环境的网络限制&#xff0c;当前选择的方案&#xff1a; 使用spark抽取业务库的数据表&#xff0c;然后利用impala jdbc数据灌输到hive。&#xff08;没有spark on hive 的条件&…

cmd命令教程

小提示&#xff1a; 在本文中&#xff0c;我将向您展示可以在 Windows 命令行上使用的 40 个命令 温馨提示&#xff1a;在本教程中学习使用适用于 Windows 10 和 CMD 网络命令的最常见基本 CMD 命令及其语法和示例 文章目录为什么命令提示符有用一、cmd是什么&#xff1f;如何在…

AcWing 4868. 数字替换(DFS + 剪枝优化)

AcWing 4868. 数字替换&#xff08;DFS 剪枝优化&#xff09;一、问题二、思路三、代码一、问题 二、思路 题目中要求变换次数最小&#xff0c;其实第一印象应该是贪心&#xff0c;即我们每一次都去成各位中最大的那个数字。但是这个想法很容易推翻。因为你这次乘了一个最大的…

gdb/git的基本使用

热爱编程的你&#xff0c;一定经常徘徊在写bug和改bug之间&#xff0c;调试器也一定是你随影而行的伙伴&#xff0c;离开了它你应该会寝食难安吧&#xff01; 目录 gdb的使用 断点操作 运行调试 观察数据 Git的使用 仓库的创建和拉取 .gitignore “三板斧” 常用指令 gd…

CV——day82 读论文:遥感目标检测的改进注意力特征融合SSD (AF-SSD)方法

遥感目标检测的改进注意力特征融合SSD 方法I. INTRODUCTIONII. RELATED WORKB. 特征融合C.注意力机制III. PROPOSED METHODA. 特性融合模块——**FFM**B.双路径注意模块——DAMC. 多尺度接受域——MRFIV. EXPERIMENTSA. Data Sets and TrainingV. CONCLUSIONAttention and Feat…

mac安装开发工具:clipy、iterm2、go、brew、mysql、redis、wget等

wget brew install wget clipy Releases Clipy/Clipy GitHub 环境变量 ~下有三个文件 .zshrc .zprofile .bash_profile > cat .zshrc export PATH$PATH:/usr/local/mysql/bin> cat .zprofile eval "$(/opt/homebrew/bin/brew shellenv)"> cat .bas…

[1.3.2]计算机系统概述——中断和异常

文章目录第一章 计算机系统概述中断和异常&#xff08;一&#xff09;中断的作用&#xff08;二&#xff09;中断的类型&#xff08;三&#xff09;中断机制的基本原理小结第一章 计算机系统概述 中断和异常 中断的作用中断的类型 内中断&#xff08;也称“异常”&#xff09;…

29- 迁移学习 (TensorFlow系列) (深度学习)

知识要点 迁移学习: 使用别人预训练模型参数时&#xff0c;要注意别人的预处理方式。 常见的迁移学习方式&#xff1a; 载入权重后训练所有参数.载入权重后只训练最后几层参数.载入权重后在原网络基础上再添加一层全连接层&#xff0c;仅训练最后一个全连接层.训练数据是 10_m…

滚蛋吧,正则表达式!

大家好&#xff0c;我是良许。 不知道大家有没有被正则表达式支配过的恐惧&#xff1f;看着一行火星文一样的表达式&#xff0c;虽然每一个字符都认识&#xff0c;但放在一起直接就让人蒙圈了~ 你是不是也有这样的操作&#xff0c;比如你需要使用「电子邮箱正则表达式」&…

面试之String、StringBuffer、StringBuilder区别

String、StringBuffer、StringBuilder区别 (1)是否可变 string对象不可变&#xff1b; StringBuffer、StringBuilder继承自AbstractStringBuilder类&#xff0c;实现原理都基于可修改的char数组&#xff0c;默认大小为16 (2)线程安全性 string中的对象不可变&#xff0c;可…

Java中String类intern()详解

1、背景在开发过程中很多朋友&#xff0c;由于不会正确使用intern()&#xff0c;导致开发的程序&#xff0c;执行效率比较差。同时最近发现一道非常有意思的关于intern()的面试题&#xff0c;这道面试题还是有不小的难度&#xff0c;相信很多朋友看到以后也不知道怎么解答&…

c++类与对象整理(上)

目录 1.类的引入 2.类的定义 3.类的访问限定符及封装 1&#xff09;访问限定符 2&#xff09;封装 4.类的作用域 5.类的实例化 6.类的对象大小的计算 1&#xff09;类对象的存储方式 2&#xff09;内存对齐和大小计算 ​编辑 7.类成员函数的this指针 1&#xff09…

linux配置网络详解

linux配置网络详解 文章目录linux配置网络详解前置准备配置流程错误排查前置准备 确定是否有网&#xff0c;比如在家里&#xff0c;确定是否连上网线&#xff1f;确定这个网线的网关是什么&#xff1f;&#xff08;这个需要和给你办网的人确定&#xff09;&#xff0c;在公司的…

超详细JDK1.8所有版本下载地址

JDK1.8即为JDK8&#xff0c;JDK8是目前是最成熟最稳定的版本&#xff0c;本文将详细介绍JDK1.8历史版本的下载方式。 在此附上JDK1.8安装与配置教程 超详细JDK1.8安装与配置 一、JDK官网 首先打开oracle官网&#xff0c;官网首页地址为 JDK官网首页地址 点击Products 点击…

Kotlin实现简单的学生信息管理系统

文章目录一、实验内容二、实验步骤1、页面布局2、数据库3、登录活动4、增删改查三、运行演示四、实验总结五、源码下载一、实验内容 根据Android数据存储的内容&#xff0c;综合应用SharedPreferences和SQLite数据库实现一个用户信息管理系统&#xff0c;强化对SharedPreferen…

ks通过恶意低绩效来变相裁员(六)各方核心利益点分析

目录 公司利益点 管理层利益点 直接管理者利益点 一线干活的同学 一线嫡系同学 公司利益点 核心利益点&#xff1a;围绕财报营收&#xff0c;降本&#xff0c;拿到好看的财报数据&#xff0c;让资本市场继续看好自己 核心手段&#xff1a; 扩展新业务&#xff0c;挖掘已…

基于数据驱动的智能空调系统需求响应可控潜力评估研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

深入理解多线程

一、线程基本概念 1、概述 线程是允许应用程序并发的一种机制。线程共享进程内的所有资源。 线程是调度的基本单位。 每个线程都有自己的 errno。 所有 pthread 函数均以返回 0 表示成功&#xff0c;返回一个正值表示失败。 编译 pthread 程序需要添加链接库&#xff08;…

【Java】反射机制和代理机制

目录一、反射1. 反射概念2. 反射的应用场景3. 反射机制的优缺点4. 反射实战获取 Class 对象的四种方式二、代理机制1. 代理模式2. 静态代理3. 动态代理3.1 JDK动态代理机制1. 介绍2.JDK 动态代理类使用步骤3. 代码示例3.2 CGLIB 动态代理机制1.介绍2.CGLIB 动态代理类使用步骤3…