it编程 > 编程语言 > Asp.net

C#项目中引用Swagger的详细步骤和配置方式

17人参与 2025-02-27 Asp.net

安装swagger相关包

打开你的c#项目解决方案,在visual studio中,右键点击项目名称,选择“管理nuget程序包”。

在nuget包管理器中,搜索以下包并进行安装:

配置swagger服务

using microsoft.openapi.models;
using swashbuckle.aspnetcore.swaggergen;

public void configureservices(iservicecollection services)
{
    // 其他服务配置...

    // 添加swagger生成器服务
    services.addswaggergen(c =>
    {
        // 定义swagger文档信息
        c.swaggerdoc("v1", new openapiinfo
        {
            version = "v1",
            title = "your api title",
            description = "your api description",
            termsofservice = new uri("https://example.com/terms"),
            contact = new openapicontact
            {
                name = "contact name",
                email = "contact@example.com",
                url = new uri("https://example.com/contact")
            },
            license = new openapilicense
            {
                name = "license name",
                url = new uri("https://example.com/license")
            }
        });

        // 配置xml注释文件路径,以便在swagger文档中显示方法注释等信息
        var xmlfile = $"{assembly.getexecutingassembly().getname().name}.xml";
        var xmlpath = path.combine(appcontext.basedirectory, xmlfile);
        c.includexmlcomments(xmlpath);

        // 如果你的api有身份验证等安全机制,可以在这里配置
        c.addsecuritydefinition("bearer", new openapisecurityscheme
        {
            in = parameterlocation.header,
            description = "please enter jwt with bearer prefix",
            name = "authorization",
            type = securityschemetype.apikey
        });
        c.addsecurityrequirement(new openapisecurityrequirement
        {
            {
                new openapisecurityscheme
                {
                    reference = new openapireference
                    {
                        type = referencetype.securityscheme,
                        id = "bearer"
                    }
                },
                new string[] {}
            }
        });
    });
}

启用swagger中间件

public void configure(iapplicationbuilder app, iwebhostenvironment env)
{
    // 其他中间件配置...

    // 启用swagger
    app.useswagger();

    // 启用swagger ui,指定swagger json文档的路由
    app.useswaggerui(c =>
    {
        c.swaggerendpoint("/swagger/v1/swagger.json", "your api v1");
        // 如果需要,可以配置swagger ui的其他选项,如文档展开深度等
        c.docexpansion(docexpansion.none);
    });
}

验证swagger是否配置成功

对特定api添加注释和描述

/// <summary>
/// 获取用户信息
/// </summary>
/// <param name="id">用户id</param>
/// <returns>用户信息对象</returns>
[httpget("{id}")]
public iactionresult getuser(int id)
{
    // 方法实现
}

在配置swagger服务时,添加安全定义可以让你为api指定各种安全机制,如jwt认证、api密钥认证等。以下以常见的jwt认证和api密钥认证为例,介绍如何添加安全定义:

jwt认证安全定义

添加命名空间引用

startup.cs文件的顶部,添加以下命名空间引用:

using microsoft.openapi.models;
using swashbuckle.aspnetcore.swaggergen;

在configureservices方法中配置swagger安全定义

startup.cs文件的configureservices方法中,找到services.addswaggergen(c => {})代码块,在其中添加以下代码:

// 添加swagger生成器服务
services.addswaggergen(c =>
{
    // 其他swagger配置...

    // 添加jwt bearer安全定义
    c.addsecuritydefinition("bearer", new openapisecurityscheme
    {
        // 定义安全机制的类型为api密钥
        type = securityschemetype.apikey,
        // 说明该密钥位于请求头中
        in = parameterlocation.header,
        // 请求头中用于传递jwt令牌的字段名称
        name = "authorization",
        // 对该安全定义的描述,在swagger ui中会显示给用户
        description = "请输入带有bearer前缀的jwt令牌"
    });

    // 添加安全要求,指定使用bearer安全定义的api需要进行身份验证
    c.addsecurityrequirement(new openapisecurityrequirement
    {
        {
            new openapisecurityscheme
            {
                // 引用前面定义的bearer安全定义
                reference = new openapireference
                {
                    type = referencetype.securityscheme,
                    id = "bearer"
                }
            },
            // 这里可以指定一些额外的作用域或权限,如果不需要可以留空数组
            new string[] { }
        }
    });
});

上述代码首先使用addsecuritydefinition方法添加了名为bearer的安全定义,指定了安全机制为api密钥,位于请求头的authorization字段中,并给出了描述。然后使用addsecurityrequirement方法指定了使用bearer安全定义的api需要进行身份验证。

api密钥认证安全定义

添加命名空间引用

同样在startup.cs文件的顶部,添加与jwt认证安全定义时相同的命名空间引用:

using microsoft.openapi.models;
using swashbuckle.aspnetcore.swaggergen;

在configureservices方法中配置swagger安全定义

startup.cs文件的configureservices方法中,找到services.addswaggergen(c => {})代码块,在其中添加以下代码:

// 添加swagger生成器服务
services.addswaggergen(c =>
{
    // 其他swagger配置...

    // 添加api密钥安全定义
    c.addsecuritydefinition("apikey", new openapisecurityscheme
    {
        // 定义安全机制的类型为api密钥
        type = securityschemetype.apikey,
        // 说明该密钥位于请求头中
        in = parameterlocation.header,
        // 请求头中用于传递api密钥的字段名称
        name = "x-api-key",
        // 对该安全定义的描述,在swagger ui中会显示给用户
        description = "请输入你的api密钥"
    });

    // 添加安全要求,指定使用apikey安全定义的api需要提供有效的api密钥
    c.addsecurityrequirement(new openapisecurityrequirement
    {
        {
            new openapisecurityscheme
            {
                // 引用前面定义的apikey安全定义
                reference = new openapireference
                {
                    type = referencetype.securityscheme,
                    id = "apikey"
                }
            },
            // 这里可以指定一些额外的作用域或权限,如果不需要可以留空数组
            new string[] { }
        }
    });
});

上述代码添加了名为apikey的安全定义,指定安全机制为api密钥,位于请求头的x - api - key字段中,并给出了描述。同时也添加了安全要求,确保使用apikey安全定义的api在调用时需要提供有效的api密钥。

在swagger中可以方便地进行api的测试和调试,以下是具体步骤:

准备工作

测试api

访问swagger ui:启动项目后,在浏览器中输入swagger ui的地址,如http://localhost:port/swagger,其中port是项目运行的端口号。进入swagger ui界面,会看到项目中所有暴露的api列表,每个api以其定义的http方法(如get、post、put、delete等)和路径显示。

选择要测试的api:在swagger ui中找到想要测试的api端点。每个api端点都有对应的描述和参数信息。

填写参数:对于需要参数的api,在swagger ui提供的参数输入区域填写相应的值。参数类型可能包括路径参数、查询参数、请求体参数等。

设置请求头:如果api需要特定的请求头信息,如authorizationcontent-type等,在swagger ui中找到“请求头”或类似的区域,添加相应的请求头名称和值。例如,如果api需要进行身份验证,可能需要在这里添加authorization头,并设置其值为有效的令牌。

执行测试:填写完参数和请求头后,点击api端点旁边的“执行”或“试一下!”按钮,swagger将发送请求到后端api。

查看响应结果:发送请求后,swagger ui会显示api的响应结果,包括响应状态码、响应头和响应体。可以根据响应信息判断api是否正常工作,以及返回的数据是否符合预期。

调试api

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

C# swagger ui增加访问限制方式

02-27

WebView渲染异常导致闪退问题的解决方案

02-27

C#实现tostring转换成16进制的方法

02-27

C# string转unicode字符的实现

02-26

C#使用Linq实现简单去重处理

02-20

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

03-03

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论