• .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 = "")
            {
                #逻辑代码
            }
    运行如下
     
  • 相关阅读:
    网络爬虫工具
    Redmine
    数据挖掘算法Analysis Services-基于SQL Server的数据挖掘
    数据挖掘和互联网广告-如何应对网盟广告作弊

    支付宝VIE的罪与罚
    迭代
    App如何推广秘籍之”渠道为王”
    Introducing Holographic Emulation
    Resources.Load加载文件返回null的原因
  • 原文地址:https://www.cnblogs.com/jzb-dev/p/13896943.html
Copyright © 2020-2023  润新知