首页 > 其他分享 >.NET7 Preview4 之OpenAPI swagger改进

.NET7 Preview4 之OpenAPI swagger改进

时间:2022-12-05 20:46:14浏览次数:63  
标签:return Description Preview4 app test NET7 new operation swagger

在MiniAPI系列中,《.NET6之MiniAPI(十八):OpenAPI swagger》介绍了swagger在MiniAPI框架中的使用,当时留下很多不足,随着.NET7 Preview4的推出,这方面得到了很大的改进,我还是使用“十八”这篇文章的案例。
  如果想参看原来文章,见下面引用:

《.NET6之MiniAPI(十八):OpenAPI swagger》

桂素伟,公众号:桂迹.NET6之MiniAPI(十八):OpenAPI swagger

  此次对OpenAPI的提升主要是通过命名空间Microsoft.AspNetCore.OpenApi带来的。

  新建API项目,选用minimal api模板,并带有OpenAPI,同时在Nuget升级Swashbuckle.AspNetCore为6.3.1以后的版本,核心代码如下:

using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.OpenApi;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{

    c.SwaggerDoc("v1",
       new OpenApiInfo
       {
           Title = "MiniAPI7_new04-V1",
           Version = "v1"
       }
    );
    //添加授权
    var schemeName = "Bearer";
    c.AddSecurityDefinition(schemeName, new OpenApiSecurityScheme
    {
        In = ParameterLocation.Header,
        Description = "请输入不带有Bearer的Token",
        Name = "Authorization",
        Type = SecuritySchemeType.Http,
        Scheme = schemeName.ToLowerInvariant(),
        BearerFormat = "JWT"
    });
    c.AddSecurityRequirement(new OpenApiSecurityRequirement {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id = schemeName
                            }
                        },
                        new string[0]
                    }
                });
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.EnablePersistAuthorization();
    });
}
//增
app.MapPost("/test", Results<Ok<Data>, NotFound> (Data data) =>
{
    if (data != null)
    {
        data.ID = 101;
        return TypedResults.Ok(data);
    }
    else
    {
        return TypedResults.NotFound();
    }
})
.WithTags("all test")
.WithOpenApi(operation =>
{
    operation.Description = "这是一个神密的功能,用来实现添加";
    operation.Summary = "添加Data";
    operation.Parameters.Clear();

    operation.RequestBody = new OpenApiRequestBody
    {
        Description = "添加的数据实体",
        Required = true,
        Content = new Dictionary<string, OpenApiMediaType>
        {
            {
                "application/json", new OpenApiMediaType
                {
                    Schema = new OpenApiSchema
                    {
                        Type = "object",
                        Properties = new Dictionary<string, OpenApiSchema>
                        {
                            {"ID",new OpenApiSchema{ Type="integer" } },
                            {"Name",new OpenApiSchema{ Type="string" } },
                            {"Token",new OpenApiSchema{ Type="string" } }
                        },
                    },
                }
            }
        },

    };
    return operation;
});

//删
app.MapDelete("/test/{id}", Results<Ok, NotFound> (int? id) =>
{
    if (id.HasValue)
    {
        return TypedResults.Ok();
    }
    else
    {
        return TypedResults.NotFound();
    }
})
.WithTags("all test")
.WithOpenApi(operation =>
{
    operation.Description = "这是一个神密的功能,用来实现删除";
    operation.Summary = "按编号删除";
    operation.Parameters[0].Description = "编号";
    operation.Parameters[0].AllowEmptyValue = true;
    return operation;
});

//改
app.MapPut("/test", (Data data) =>
{
})
.WithTags("all test")
.WithOpenApi(operation =>
{
    operation.Description = "这是一个神密的功能,用来实现修改";
    operation.Summary = "修改Data";
    operation.Parameters.Clear();
    return operation;
});

//查
app.MapGet("/test/{id}", Results<Ok<Data>, NotFound> (HttpRequest request, int? id) =>
{
    if (id.HasValue)
    {
        return TypedResults.Ok(new Data() { ID = id.Value, Name = "测试", Token = request.Headers["Authorization"] });
    }
    else
    {
        return TypedResults.NotFound();
    }
})
.WithTags("all test")
.WithOpenApi(operation =>
 {
     operation.Description = "这是一个神密的功能,用来实现查询";
     operation.Summary = "按编号查询";
     operation.Parameters[0].Description = "编号";
     operation.Parameters[0].AllowEmptyValue = true;
     return operation;
 });

app.Run();
/// <summary>
/// 提交数据
/// </summary>
class Data
{
    /// <summary>
    /// 编号 
    /// </summary>
    public int ID { get; set; }
    /// <summary>
    /// 名称
    /// </summary>
    public string? Name { get; set; }

    /// <summary>
    /// Token
    /// </summary>
    public string? Token { get; set; }
}

  看看效果:

 

 

   是不是比之前更人性化了?

  想要更快更方便的了解相关知识,可以关注微信公众号

 

 

标签:return,Description,Preview4,app,test,NET7,new,operation,swagger
From: https://www.cnblogs.com/axzxs2001/p/16953425.html

相关文章

  • .NET7 Preview4 之OpenAPI swagger改进
    在MiniAPI系列中,《.NET6之MiniAPI(十八):OpenAPIswagger》介绍了swagger在MiniAPI框架中的使用,当时留下很多不足,随着.NET7Preview4的推出,这方面得到了很大的改进,我还......
  • .NET7 Preview4之MapGroup
    这篇是“闻(看)香(码)识(学)女(技)人(术)”。这也是一个有意思的功能,路由分组,啥也不说了,看代码看结果:usingMicrosoft.AspNetCore.Http.HttpResults;usingMic......
  • MiniAPI:.NET7 Preview4之MiniAPI更新总览
    一觉醒来,发现微软带来了.NET7Preview4的更新,本次更新关于MiniAPI的还不少,难以掩饰的喜悦心情,促使我尽快把这个消息分享给大家,那下来我们看一下一共带来了哪些关于MiniA......
  • .NET7之MiniAPI(特别篇):.NET7 Preview3
    .NET7的第三个预览版发布了,同样带来了miniapi的更新,这次带来了路由过滤器,与mvc版的action过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-up......
  • .NET7之MiniAPI(特别篇):.NET7 Preview3
    .NET7的第三个预览版发布了,同样带来了miniapi的更新,这次带来了路由过滤器,与mvc版的action过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-u......
  • .NET7之MiniAPI(特别篇):.NET7 Preview3
    .NET7的第三个预览版发布了,同样带来了miniapi的更新,这次带来了路由过滤器,与mvc版的action过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-u......
  • 测试篇 c#net7nativeAOT桌面图标位置备份器
    项目备份windows桌面的图标位置为jsonc#项目是net7nativeAOT的框架,内有json生成器的处理.编译方式在.csproj文件的路径上面(删除路径)输入cmd,回车:dotnetpub......
  • ASP.NET Web API Demo OwinSelfHost 自宿主 Swagger Swashbuckle 在线文档
    新建WebAPI工程 选Empty,勾选WebAPI,不要选择WebAPI,那样会把MVC勾上,这里不需要MVCWebAPI工程属性 XML文件用于生成在线文档  新建Windows服务作为WebAPI的......
  • 使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例
    使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例 译者注本文是一篇不可多得的好文,MemoryPack的作者neuecc大佬通过本文解释了他是如何将序列化程序性能提......
  • 使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例
    译者注本文是一篇不可多得的好文,MemoryPack的作者neuecc大佬通过本文解释了他是如何将序列化程序性能提升到极致的;其中从很多方面(可变长度、字符串、集合等)解释了一......