zoukankan      html  css  js  c++  java
  • .net core项目接入Swagger

    工作中遇到前后端分离项目,会有接口对接方面的需要,在项目里引用了Swagger,用来查看、测试Web接口
     
    项目环境: .net core 3.1 
    开发工具:VS 2019
     
    项目引用相关包:
    Swashbuckle.AspNetCore 5.4.1
    Swashbuckle.AspNetCore.Annotations 5.4.1
     
    在项目初始化时注入相关服务 ,修改Startup.cs文件
    using Microsoft.Extensions.Hosting;
    using Microsoft.AspNetCore.Hosting;
    using Swashbuckle.AspNetCore.Swagger;
    
        public void ConfigureServices(IServiceCollection services)
            {
                services.AddCustomizedSwaggerGen();// #增加SwaggerGen
                services.AddControllers();
                services.AddCors(option => option.AddPolicy("cors", policy => policy.AllowAnyOrigin())); #接口跨域时,会用到该配置。默认不需要
            }
    
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                app.UseCustomizedSwagger(env);// #增加SwaggerGen ,传入环境参数env
            }
     

    增加帮助类 SwaggerExtensions.cs

    using System.Linq;
    using Microsoft.OpenApi.Models;
    using Swashbuckle.AspNetCore.SwaggerGen;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.DependencyInjection;
    using Swashbuckle.AspNetCore.SwaggerGen;
    
        public static class SwashbuckleSwaggerExtensions
        {
            public static IServiceCollection AddCustomizedSwaggerGen(this IServiceCollection services)
            {
                services.AddSwaggerGen(options =>
                {
                    foreach (var doc in _docs) options.SwaggerDoc(doc, new OpenApiInfo { Version = doc });
                    options.DocInclusionPredicate((docName, apiDesc) =>
                    {
                        if (apiDesc.TryGetMethodInfo(out var method) == false) return false;
                        var versions = method.DeclaringType.GetCustomAttributes(false)
                            .OfType<ApiExplorerSettingsAttribute>()
                            .Select(attr => attr.GroupName);
                        if (docName == "未分类" && versions.Count() == 0) return true;
                        return versions.Any(v => v == docName);
                    });
                    options.IgnoreObsoleteActions();
                    //options.IgnoreObsoleteControllers(); // 类、方法标记 [Obsolete],可以阻止【Swagger文档】生成
                    //options.EnableAnnotations();
                    options.DescribeAllEnumsAsStrings();
                    options.CustomSchemaIds(a => a.FullName);
                    options.OperationFilter<FormDataOperationFilter>();
                });
                return services;
            }
            static string[] _docs = new[] { "webapi", "webui" }; 
            public static IApplicationBuilder UseCustomizedSwagger(this IApplicationBuilder app, IWebHostEnvironment env)
            {
                return app.UseSwagger().UseSwaggerUI(options =>
                {
                    foreach (var doc in _docs) options.SwaggerEndpoint($"/swagger/{doc}/swagger.json", doc);
                });
            }
        }
      

    增加筛选器

    using Microsoft.OpenApi.Models;
    using Swashbuckle.AspNetCore.SwaggerGen;
    
        public class FormDataOperationFilter : IOperationFilter
        {
            public void Apply(OpenApiOperation operation, OperationFilterContext context)
            {
    
            }
        }

    相关配置已经完成。 接下来对代码增加标记

    using Microsoft.AspNetCore.Mvc;
    using Swashbuckle.AspNetCore.Annotations;
    
    [HttpGet("LoginCheck"), SwaggerOperation(Tags = new[] { "LoginCheck" })]
            public string loginCheck(string jwt)
            {
            #逻辑代码
            }
    
     [HttpGet, SwaggerOperation(Tags = new[] { "查询事件接口" })]
            public AjaxResult Get(string day_id01 = "")
            {
                #逻辑代码
            }
    运行如下
     
  • 相关阅读:
    C# WinForm下,隐藏主窗体,只在进程管理器中显示进程,在任务栏,状态栏都不显示窗体的方法
    C#全能数据库操作类及调用示例
    多个汇总列转换为行记录 mssql
    Oracle 10g创建数据库 用户等基本操作
    Jquery基本选择器 层次选择器 过滤选择器 表单选择器使用示例 带注释
    SQL与ORACLE的外键约束级联更新和删除
    C# 屏幕监控 自动截屏程序 主窗体隐藏,仅在进程中显示
    图文讲解VS2010程序打包操作 安装卸载
    查表法按日期生成流水号 mssql
    给DataTable添加主键 几何级提升Select筛选数据的速度
  • 原文地址:https://www.cnblogs.com/jzb-dev/p/13896943.html
Copyright © 2011-2022 走看看