.Net swagger初探(配置swagger汉化及请求头设置系统发布)

.Net swagger初探(配置swagger汉化及请求头设置系统发布)

首先肯定是需要一个API的项目这里就不详细介绍了下面主要介绍一下swagger的使用
1:右键点击项目引用管理NuGet程序包找到Swashbuckle下载

在这里插入图片描述下载之后你会发现在APP_start中会多处一个文件SwaggerConfig这里就是swagger的配置项之后的设置都需要在其中操作,
2:接下来配置输出文件路径
在这里插入图片描述
这里值得注意的一点是配置中要选择Release否侧你会发现在发布的时候你的发布文件中是不包含.xml这个文件的
3:到这里大家运行项目地址栏中加上swagger就可以看到swagger文档了
在这里插入图片描述
好的文档生成了很完美;
但是
大家要明白文档作用主要是给别人阅读方便而我们现在生成的文档是很难让人看懂的;
这里就要大家规范自己的代码一定要在方法及接口中加必要的注解,这里推荐给大家一个工具StyleCode 同样通过Nuget搜索StyleCop.Analyzers就可以使用了 其中涉及到一些自定义的操作之后需要会给大家介绍的;

接口规范之后大家也会发现想要的注解并没有显示出来是因为swagger本身是英文版的不支持中文注解这里就需要我们做一下汉话的操作
4:新建类SwaggerCacheProvider继承ISwaggerProvider
代码实现

        /// SwaggerCacheProvider.
        /// </summary>
        /// <param name="swaggerProvider">swaggerProvider.</param>
        /// <param name="xml">xml文档路径.</param>
        public SwaggerCacheProvider(ISwaggerProvider swaggerProvider, string xml)
        {
            this.swaggerProvider = swaggerProvider;
            this.xml = xml;
        }        /// <inheritdoc/>
        public SwaggerDocument GetSwagger(string rootUrl, string apiVersion)
        {
            var cacheKey = string.Format("{0}_{1}", rootUrl, apiVersion);
            SwaggerDocument srcDoc = null;            // 只读取一次.
            if (!cache.TryGetValue(cacheKey, out srcDoc))
            {
                srcDoc = swaggerProvider.GetSwagger(rootUrl, apiVersion);                srcDoc.vendorExtensions = new Dictionary<string, object> { { "ControllerDesc", GetControllerDesc() } };
                cache.TryAdd(cacheKey, srcDoc);
            }            return srcDoc;
        }        /// <summary>
        /// 从API文档中读取控制器描述.
        /// </summary>
        /// <returns>所有控制器描述.</returns>
        public ConcurrentDictionary<string, string> GetControllerDesc()
        {
            string xmlpath = xml;
            ConcurrentDictionary<string, string> controllerDescDict = new ConcurrentDictionary<string, string>();
            if (File.Exists(xmlpath))
            {
                XmlDocument xmldoc = new XmlDocument();
                xmldoc.Load(xmlpath);
                string type = string.Empty, path = string.Empty, controllerName = string.Empty;                string[] arrPath;
                int length = -1, cCount = "Controller".Length;
                XmlNode summaryNode = null;
                foreach (XmlNode node in xmldoc.SelectNodes("//member"))
                {
                    type = node.Attributes["name"].Value;
                    if (type.StartsWith("T:"))
                    {
                        // 控制器.
                        arrPath = type.Split('.');
                        length = arrPath.Length;
                        controllerName = arrPath[length - 1];
                        if (controllerName.EndsWith("Controller"))
                        {
                            // 获取控制器注释.
                            summaryNode = node.SelectSingleNode("summary");
                            string key = controllerName.Remove(controllerName.Length - cCount, cCount);
                            if (summaryNode != null && !string.IsNullOrEmpty(summaryNode.InnerText) && !controllerDescDict.ContainsKey(key))
                            {
                                controllerDescDict.TryAdd(key, summaryNode.InnerText.Trim());
                            }
                        }
                    }
                }
            }            return controllerDescDict;
        }
    }

然后新建一个swagger.js文件并设置为嵌套的资源我的浏览器有问题这里暂时先不上代码了 大家可以在网上有很多这个代码

接下来配置一下SwaggerConfig在这里插入图片描述

 c.IncludeXmlComments(string.Format("{0}/bin/GMExpenseAPI.xml", System.AppDomain.CurrentDomain.BaseDirectory));
c.CustomProvider((defaultProvider) => new SwaggerCacheProvider(defaultProvider, string.Format("{0}/bin/GMExpenseAPI.XML", System.AppDomain.CurrentDomain.BaseDirectory)));
 c.OperationFilter<HttpAuthHeaderFilter>();

c.InjectJavaScript(System.Reflection.Assembly.GetExecutingAssembly(), "GMExpenseAPI.swagger.js");

这样就完成了汉化就可以看到文档中出现了明显的注释内容

很多的接口我们都会添加验证方式如果是请求头中的如何在swagger中增加呢 我们来继续操作
新建类HttpAuthHeaderFilter继承IOperationFilter

在这里插入图片描述
到这里所有的设置就结束了 如果哪里有不足的地方或者 大家有什么问题可以留言给我;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET中使用Swagger进行鉴权可以通过以下步骤实现: 1. 首先,确保你的项目中已经安装了`Swashbuckle.AspNetCore`包。如果没有安装,可以通过以下命令进行安装: ```shell dotnet add package Swashbuckle.AspNetCore ``` 2. 在`Startup.cs`文件中的`ConfigureServices`方法中,添加Swagger的服务配置: ```csharp services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Your API", Version = "v1" }); // 添加鉴权信息 var securityScheme = new OpenApiSecurityScheme { Name = "Authorization", Type = SecuritySchemeType.ApiKey, Scheme = "Bearer", BearerFormat = "JWT", In = ParameterLocation.Header, Description = "Enter your JWT token in the text input below.", }; c.AddSecurityDefinition("Bearer", securityScheme); // 添加鉴权要求 var securityRequirement = new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] {} } }; c.AddSecurityRequirement(securityRequirement); }); ``` 3. 在`Startup.cs`文件中的`Configure`方法中,启用Swagger中间件: ```csharp app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Your API V1"); // 添加鉴权按钮 c.DocumentTitle = "Your API"; c.InjectStylesheet("/swagger-ui/custom.css"); c.InjectJavascript("/swagger-ui/custom.js"); }); ``` 4. 在你的控制器或操作方法上添加`[Authorize]`特性,以启用鉴权。 现在,你的API将会在Swagger UI中显示鉴权按钮,并要求用户提供JWT令牌进行访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值