c# .Net Core 项目配置SWagger UI 带Token访问

news2024/9/27 15:18:46

简介

Swagger是一款强大的API管理工具,它主要用于生成、描述、调用和可视化RESTful风格的Web服务。Swagger通过一套标准的规范定义接口及其相关信息,从而能够自动生成各种格式的接口文档(如HTML、PDF、Markdown等),并支持生成多种语言和客户端、服务端的代码,以及提供在线接口调试页面,极大地方便了开发人员进行接口的开发和测试。 

在ASP.NET Core的Web API项目中,通常会默认注入Swagger服务,但是默认的Swagger并没有开启挈带Token配置功能。如需开启,需要在Swagger的配置中添加一些特定的设置。

默认配置

 在新建的WebApi项目的Program文件中,默认会有下面这三个配置,这三行代码行是配置和使用Swagger的关键步骤。下面我们先来了解这三行代码的具体作用。

builder.Services.AddSwaggerGen();
app.UseSwagger();
app.UseSwaggerUI();
  1. builder.Services.AddSwaggerGen();

    这行代码是在项目的服务配置阶段调用的,它的作用是向ASP.NET Core的依赖注入(DI)容器中添加Swagger生成器的服务。Swagger生成器负责扫描你的控制器和动作,并基于这些信息生成Swagger文档(通常是一个JSON文件),这个文档描述了你的API的结构,包括可用的端点、请求方法、请求和响应格式等。

    你还可以在这个调用中配置Swagger生成器的各种选项,比如文档标题、版本、要包括或排除的API控制器、安全定义等,如之前示例中所示。

  2. app.UseSwagger();

    这行代码是在应用程序的请求处理管道中配置Swagger中间件的。它告诉ASP.NET Core,当请求匹配到Swagger文档的路径(默认情况下是/swagger/{documentName}/swagger.json)时,应该使用Swagger中间件来处理这些请求。Swagger中间件的作用就是提供Swagger文档的JSON表示,这个文档可以被Swagger UI或其他工具用来渲染API文档。

    注意,这个中间件本身并不提供UI界面,它只是提供了一个JSON格式的API描述文档。

  3. app.UseSwaggerUI();

    这行代码也是在应用程序的请求处理管道中配置的,但它添加的是Swagger UI的中间件。Swagger UI是一个Web UI,它允许你浏览和测试你的RESTful API。当你访问Swagger UI的路径(默认情况下是/swagger/swagger/index.html)时,这个中间件会处理请求,并提供一个用户友好的界面来显示你的API文档,并允许你发送请求到你的API端点。

    你可以在这个调用中配置Swagger UI的各种选项,比如文档标题、Swagger JSON文件的路径、OAuth2客户端配置等。

 Swagger配置添加设置

为了在测试API时能够发送带有认证信息的请求,我们需要在Swagger的配置中添加一些特定的设置。这些设置包括如何向Swagger UI展示认证方式(如Bearer Token),并允许用户在UI中输入Token值。

var builder = WebApplication.CreateBuilder(args);  
  
// 添加服务  
builder.Services.AddControllers();  
  
// 添加Swagger生成器  
builder.Services.AddEndpointsApiExplorer();  
builder.Services.AddSwaggerGen(c =>  
{  
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });  
  
    // 添加Bearer认证  
    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme  
    {  
        Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",  
        Name = "Authorization",  
        In = ParameterLocation.Header,  
        Type = SecuritySchemeType.ApiKey,  
        Scheme = "Bearer"  
    });  
  
    // 为API添加Bearer认证需求  
    c.AddSecurityRequirement(new OpenApiSecurityRequirement()  
    {  
        {  
            new OpenApiSecurityScheme  
            {  
                Reference = new OpenApiReference  
                {  
                    Type = ReferenceType.SecurityScheme,  
                    Id = "Bearer"  
                },  
                Scheme = "oauth2",  
                Name = "Bearer",  
                In = ParameterLocation.Header,  
            },  
            new List<string>()  
        }  
    });  
});  
  
var app = builder.Build();  
  
// 配置Swagger中间件  
if (app.Environment.IsDevelopment())  
{  
    app.UseSwagger();  
    app.UseSwaggerUI(c =>  
    {  
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");  
        // 可以在这里配置Swagger UI的其他选项,比如OAuth2客户端配置  
    });  
}  
  
app.UseHttpsRedirection();  
  
app.UseAuthorization();  
  
app.MapControllers();  
  
app.Run();

在配置调整完成后,我们启动项目,打开swagger UI ,可以在右上角看到一个Authorize的按钮。

点击按钮,会出现一个弹窗,我们只需要在value中输入我们的token。

届时再发送请求,我们的请求头中就会携带设置的token了。

(优化)使用扩展方法配置

像上面这样配置swagger会导致program很冗余,我们可以将Swagger的配置放入一个单独的扩展类使Program.cs文件更加整洁和易于管理。

首先,创建一个新的静态类,比如命名为SwaggerExtensions,并在其中定义一个扩展方法来配置Swagger。

using Microsoft.AspNetCore.Builder;  
using Microsoft.Extensions.DependencyInjection;  
using Microsoft.OpenApi.Models;  
  
public static class SwaggerExtensions  
{  
    public static IServiceCollection AddCustomSwagger(this IServiceCollection services)  
    {  
        services.AddSwaggerGen(c =>  
        {  
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });  
  
            // 添加Bearer认证  
            c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme  
            {  
                Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",  
                Name = "Authorization",  
                In = ParameterLocation.Header,  
                Type = SecuritySchemeType.ApiKey,  
                Scheme = "Bearer"  
            });  
  
            // 为API添加Bearer认证需求  
            c.AddSecurityRequirement(new OpenApiSecurityRequirement()  
            {  
                {  
                    new OpenApiSecurityScheme  
                    {  
                        Reference = new OpenApiReference  
                        {  
                            Type = ReferenceType.SecurityScheme,  
                            Id = "Bearer"  
                        },  
                    },  
                    new List<string>()  
                }  
            });  
        });  
  
        return services;  
    }  
  
    public static IApplicationBuilder UseCustomSwagger(this IApplicationBuilder app)  
    {  
        if (app.Environment.IsDevelopment())  
        {  
            app.UseSwagger();  
            app.UseSwaggerUI(c =>  
            {  
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");  
                // 可以在这里配置Swagger UI的其他选项  
            });  
        }  
  
        return app;  
    }  
}

然后,在Program.cs中,使用这些扩展方法来配置Swagger:

var builder = WebApplication.CreateBuilder(args);  
  
builder.Services.AddControllers();  
builder.Services.AddEndpointsApiExplorer();  
builder.Services.AddCustomSwagger(); // 使用扩展方法添加Swagger服务  
  
// 其他服务配置...  
  
  
var app = builder.Build();  
  
app.UseCustomSwagger(); // 使用扩展方法配置Swagger中间件  
  
// 其他中间件配置...  
  
app.UseHttpsRedirection();  
app.UseAuthentication();  
app.UseAuthorization();  
  
app.MapControllers();  
  
app.Run();

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

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

相关文章

知识库、微调、AI Agent

Agent执行工作的过程是需要大模型来配合的&#xff0c;大模型充当一个大脑&#xff0c;给Agent下达指令。Agent当接收到这个指令的时候&#xff0c;然后去执行。 大模型参数的数量直接影响大模型的生成能力和推理能力&#xff0c;也直接影响了大模型的使用效果。参数越多&…

【竞技宝】奥运会:日本U23惨败梦想破裂

奥运会男足8进4的比赛已经全部结束,夺冠热门阿根廷被东道主法国淘汰,埃及点球淘汰巴拉圭,摩洛哥4比0大胜美国,亚洲球迷关心的日本U23竟然惨败西班牙U23,让不少球迷都觉得意外。因为日本U23赛前被普遍看好,可是他们却被西班牙队全面压制,甚至毫无还手之力,这样的结果让球迷们不禁…

【linux】linux中定时任务的巧妙运用,让你轻松解放双手

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

书生·共学计划|训练营又开始啦!

&#x1f970; 在大模型技术的浪潮中&#xff0c;面对混杂的众多信息&#xff0c;如何获取有效、可信的学习资源成为了一项挑战。为此&#xff0c;我们推出“书生共学计划”&#xff0c;鼓励大家将实战营活动分享给你身边有需要的小伙伴&#xff0c;让每一位热爱技术的朋友都能…

无人机培训机构开办投资收益分析

一、引言 随着无人机技术的飞速发展及其在航拍、农业、测绘、物流等多个领域的广泛应用&#xff0c;市场对无人机专业人才的需求急剧增长。因此&#xff0c;开设无人机培训机构成为了一个具有广阔市场前景的投资项目。本报告旨在全面分析无人机培训机构开办的投资收益&#xf…

面向开发者的 LLM 入门教程-笔记和代码

本文是 DLAI 课程 ChatGPT Prompt Engineering for Developers 的笔记。这门课面向入门 LLM 的开发者&#xff0c;深入浅出地介绍了如何构造 Prompt 并基于 OpenAI 提供的 API 实现包括总结、推断、转换等功能&#xff0c;是入门 LLM 开发的经典教程。 Prompt&#xff08;提示…

【BES2500x系列 -- RTX5操作系统】系统执行流程 -- 系统初始化 -- main函数 --(十一)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

OJ-0805

题目 参考 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int L1 scanner.nextInt();int L2 scanner.nextInt();int[] A new int[L1];int[] B new int[L2];fo…

算法回忆录(1)

1.编程求1*2*3*4*……*n的末尾有多少个0。 #include <stdio.h>// 计算 n! 中末尾的0的个数 int count_zeros_in_factorial(int n) {int count 0;for (int i 5; n / i > 1; i * 5) {count n / i;}return count; }int main() {int n;printf("请输入一个整数 n&…

代码随想录day34 || 62不同路径 63不同路径2 343整数拆分

动归5步法 1&#xff0c;确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2&#xff0c;确定递推公式 3&#xff0c;dp数组如何初始化 4&#xff0c;确定遍历顺序 5&#xff0c;举例推导dp数组 62不同路径 力扣题目链接 题目描述&#xff1a; 一个机器人…

免费分享一套SpringBoot+Vue图书(图书借阅)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue图书(图书借阅)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue图书(图书借阅)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 本论文阐述了一套先进的图书管理系…

分享一个基于Node.js和Vue的游戏点单陪玩系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

MQ面试篇

目录 传送门前言一、MQ优缺点二、MQ消息重复问题处理&#xff08;精品&#xff09;三、保证MQ消息不丢失四 、MQ百万消息持续积压问题五、如果保证MQ的高可用 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringB…

山东青岛高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

青岛高校大学智能制造实验室作为高校科研和人才培养的重要基地&#xff0c;一直致力于推动智能制造技术的研发和应用。为了提升实验室在智能制造领域的教学、科研和产业合作能力&#xff0c;实验室决定建设数字孪生可视化系统平台。 智能制造数字孪生项目旨在通过搭建一个全面…

C语言实现希尔排序和堆排序

目录 1.希尔排序 1.1基本思想 1.2希尔排序的特性总结 1.3希尔排序算法的实现 2.堆排序 2.1基本思想 2.2堆排序的特性总结 2.3堆排序算法的实现 1.希尔排序 1.1基本思想 希尔排序法的基本思想是&#xff1a;先选定一个整数(gap)&#xff0c;把待排序文件中所有记录分成…

自定义微信小程序源码系统 带网站的源代码包以及搭建部署教程

系统概述 自定义微信小程序源码系统是一套完整的解决方案&#xff0c;包含了微信小程序的源代码以及配套的网站源代码包。它为开发者提供了一个可定制、可扩展的开发平台&#xff0c;让开发者能够根据自己的需求和创意&#xff0c;快速构建出具有独特风格和功能的微信小程序。…

微力同步如何安装使用并使用内网穿透配置公网地址远程访问

文章目录 1.前言2. 微力同步网站搭建2.1 微力同步下载和安装2.2 微力同步网页测试2.3 内网穿透工具安装 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 私有云盘作为云存储概念的延伸&#xff0c;虽然谈不上多么新颖&#xff0c;但是其广…

CodeWave简介

CodeWave是网易自主研发的领先低代码平台&#xff0c;可快速搭建公司官网、项目管理、OA等各种企业信息化系统&#xff0c;助力企业数字化提质增效。产品特点&#xff1a;低门槛&#xff08;降低软件开发门槛&#xff0c;赋能非专业技术人员专职从事软件开发工作&#xff09;、…

要想赚钱,AI模型该大该小?贾扬清:论AI模型经济学的技巧

卖模型就像感恩节卖火鸡&#xff0c;快才能赚钱。 最近的AI社区&#xff0c;关于模型规模的讨论有些活跃。 一方面&#xff0c;此前在大模型开发奉为“圣经”的Scaling Law&#xff0c;似乎正在褪去光环。去年大家还在猜测GPT-5的规模“可能会大到想不到”&#xff0c;现在这…

2024华数杯C题解题思路及详细建模步骤分享+双语言代码

2024“华数杯”数模竞赛已经开赛啦&#xff0c;这次给大家带来的是今年华数杯C题解题思路&#xff0c;内容由我们团队的众多国奖学长学姐给大家出具高质量的解题思路&#xff0c;参考代码等&#xff0c;希望能助大家一臂之力。 问题1: 请问352 个城市中所有35200 个景点评分的最…