第10章Swagger自定义实现index.html页

1 初始化index.html页

    复制原程序“index.html”页的内容到当前程序员“index.html”页。

    注意:是内容复制,如果是页面替换复制,则必须重新把“index.html”页的属性中的“生成操作”设定为:“嵌入的资源”。

2 自定义SwaggerSetup依赖注入中间件

    using Common.GlobalVar;

using Common.Helper;

using log4net;

using Microsoft.Extensions.DependencyInjection;

using Microsoft.OpenApi.Models;

using Swashbuckle.AspNetCore.Filters;

using System.Runtime.InteropServices;

using static Extensions.ServiceExtensions.CustomApiVersion;

namespace Extensions.ServiceExtensions

{

    /// <summary>

    /// Swagger依赖注入--类】

    /// </summary>

    /// <remarks>

    /// 摘要:

    ///     通过AddSwaggerGen依赖注入中间,获取Api控制器方法的版本控制信息和注释等数据信息,依赖注入.Net7框架的内置容器中,为在“index.html”页面上渲染显示这些信息,作好预处理操作。

    /// </remarks>

    public static class SwaggerSetup

    {

        #region 变量--私有/保护----静态

        /// <summary>

        /// 【日志】

        /// <remarks>

        /// 摘要:

        ///     通过“Log4net”日志中间件实例,把当前类的操作信息持久化;或显显示在控制台窗口中。

        /// </remarks>

        /// </summary>

        private static readonly ILog log = LogManager.GetLogger(typeof(SwaggerSetup));

        #endregion

        #region 方法--静态

        ///<param name="services">.Net(Core)框架内置依赖注入容器实例。</param>

        /// <summary>

        /// 【添加SqlSugar注入】

        /// </summary>

        /// <remarks>

        /// 摘要:

        ///     通过AddSwaggerGen依赖注入中间,获取Api控制器方法的版本控制信息和注释等数据信息,依赖注入.Net7框架的内置容器中,为在“index.html”页面上渲染显示这些信息,作好预处理操作。

        /// </remarks>

        public static void AddSwaggerSetup(this IServiceCollection services)

        {

            if (services == null) throw new ArgumentNullException(nameof(services));

            var basePath = AppContext.BaseDirectory;

            //var basePath2 = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath;

            var ApiName = AppSettings.app(new string[] { "Startup", "ApiName" });

            services.AddSwaggerGen(c =>

            {

                //遍历出全部的版本,做文档信息展示

                typeof(ApiVersions).GetEnumNames().ToList().ForEach(version =>

                {

                    c.SwaggerDoc(version, new OpenApiInfo

                    {

                        Version = version,

                        Title = $"{ApiName} 接口文档——{RuntimeInformation.FrameworkDescription}",

                        Description = $"{ApiName} HTTP API " + version,

                        Contact = new OpenApiContact { Name = ApiName, Email = "Blog.Core@xxx.com", Url = new Uri("https://neters.club") },

                        License = new OpenApiLicense { Name = ApiName + " 官方文档", Url = new Uri("http://apk.neters.club/.doc/") }

                    });

                    c.OrderActionsBy(o => o.RelativePath);

                });

                c.UseInlineDefinitionsForEnums();

                try

                {

                    //这个就是刚刚配置的xml文件名

                    var xmlPath = Path.Combine(basePath, "WebApi.xml");

                    //默认的第二个参数是false,这个是controller的注释,记得修改

                    c.IncludeXmlComments(xmlPath, true);

                    //这个就是Model层的xml文件名

                    var xmlModelPath = Path.Combine(basePath, "Blog.Core.Model.xml");

                    c.IncludeXmlComments(xmlModelPath);

                }

                catch (Exception ex)

                {

                    log.Error("WebApi.xmlBlog.Core.Model.xml 丢失,请检查并拷贝。\n" + ex.Message);

                }

                //Nuget--Swashbuckle.AspNetCore.Filters

                // 开启加权小锁

                c.OperationFilter<AddResponseHeadersFilter>();

                c.OperationFilter<AppendAuthorizeToSummaryOperationFilter>();

                // header中添加token,传递到后台

                c.OperationFilter<SecurityRequirementsOperationFilter>();

                // ids4jwt切换

                if (Permissions.IsUseIds4)

                {

                    //接入identityserver4

                    c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme

                    {

                        Type = SecuritySchemeType.OAuth2,

                        Flows = new OpenApiOAuthFlows

                        {

                            Implicit = new OpenApiOAuthFlow

                            {

                                AuthorizationUrl = new Uri($"{AppSettings.app(new string[] { "Startup", "IdentityServer4", "AuthorizationUrl" })}/connect/authorize"),

                                Scopes = new Dictionary<string, string> {

                                {

                                    "blog.core.api","ApiResource id"

                                }

                            }

                            }

                        }

                    });

                }

                else

                {

                    // Jwt Bearer 认证,必须是 oauth2

                    c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme

                    {

                        Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)\"",

                        Name = "Authorization",//jwt默认的参数名称

                        In = ParameterLocation.Header,//jwt默认存放Authorization信息的位置(请求头中)

                        Type = SecuritySchemeType.ApiKey

                    });

                }

            });

            //Nuget--Swashbuckle.AspNetCore.Newtonsoft

            services.AddSwaggerGenNewtonsoftSupport();

        }

        #endregion

    }

    /// <summary>

    /// 【自定义Api版本--类】

    /// <remarks>

    /// 摘要:

    ///    该类中的枚举实例通过版本分类的方式,把当前程序中的Api控制器方法分为两类(也可以分为更多的类)

    /// 应用场景:

    ///     在由于前端版本迭代,而需要更新Api控制器方法时,为了兼容旧的前端就需要“Api版本控制在不修改旧的Api控制器方法,而是定义新的Api控制器方法,来解决前端版本迭代的兼容性问题。

    /// </remarks>

    /// </summary>

    public class CustomApiVersion

    {

        /// <summary>

        /// Api版本--枚举】

        /// <remarks>

        /// 摘要:

        ///    该枚举通过版本分类的方式,把当前程序中的Api控制器方法分为两类(也可以分为更多的类)

        /// 应用场景:

        ///     在由于前端版本迭代,而需要更新Api控制器方法时,为了兼容旧的前端就需要“Api版本控制在不修改旧的Api控制器方法,而是定义新的Api控制器方法,来解决前端版本迭代的兼容性问题。

        /// </remarks>

        /// </summary>

        public enum ApiVersions

        {

            /// <summary>

            /// V1

            /// <remarks>

            /// 摘要:

            ///    1种版本分类的Api控制器方法。

            /// </remarks>

            /// </summary>

            V1 = 1,

           

            /// <summary>

            /// V2

            /// <remarks>

            /// 摘要:

            ///    2种版本分类的Api控制器方法。

            /// </remarks>

            /// </summary>

            V2 = 2,

        }

    }

}

3 重构Program类

//通过AddSwaggerGen依赖注入中间,获取Api控制器方法的版本控制信息和注释等数据信息,依赖注入.Net7框架的内置容器中,为在“index.html”页面上渲染显示这些信息,作好预处理操作。

builder.Services.AddSwaggerSetup();

builder.Services.AddControllers();

    按F5执行程序,在执行登录操作后,即可跳转到自定义的“index.html”面,如上图所示

对以上功能更为具体实现和注释见:221202_09Blog(Swagger自定义实现index.html页)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值