记Asp.Net Core Swagger 使用 并带域接口处理

引用作者原话:Asp.Net的WebApi中使用Swagger作为说明和测试的页面是非常不错的,比起WebApiTestClient来至少在界面上的很大的提升。但是使用Swagger时如果只是一般的控制器直接放到Controller下就可以了,而如果因不同的业务需求而需要分类或者有同名的类名时时则没办法很好的处理。

  因为业务需求需要创建域,但是Swagger 并未将域添加到接口。所以需要加上以下操作才行。

安装Swagger 方法:

    为了大家多看微软官方文档、就直接引用Swagger安装及使用方法。 以下是微软官方文档。

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-2.1&tabs=visual-studio

增加域接口显示方法:

 

 

using Microsoft.AspNetCore.Mvc.ApiExplorer;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace System.Web.Http.Description
{
    /// <summary>
    /// API描述器扩展
    /// </summary>
    public static class ApiDescriptionExtension
    {
        /// <summary>
        /// 获取区域名称
        /// </summary>
        /// <param name="description"></param>
        /// <returns></returns>
        public static List<string> GetAreaName(this ApiDescription description)
        {
            string areaName = description.ActionDescriptor.RouteValues["area"];
            string controlName = description.ActionDescriptor.RouteValues["controller"];
            List<string> areaList = new List<string>();
            areaList.Add(controlName);
            if (!string.IsNullOrEmpty(areaName))
            {
                description.RelativePath = $"{areaName}/{controlName}/{description.RelativePath}";
            } 
            return areaList;
        }
    }
}

通过接口描述扩展获取区域及相关信息进行改写扩展。

 

使用说明:

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1",new Swashbuckle.AspNetCore.Swagger.Info
                {
                    Version = "v1.0.0",Title = " API",Description = description,TermsOfService = "你的公司",Contact = new Swashbuckle.AspNetCore.Swagger.Contact { Name = "Blog.Core",Email = "[email protected]",Url = "https://www.jianshu.com/u/94102b59cc2a" }
                    
                });
                //使用域描述
                c.TagActionsBy(apiDesc => apiDesc.GetAreaName());

                var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                var xmlPath = Path.Combine(basePath,xmlName);//这个就是刚刚配置的xml文件名
                c.IncludeXmlComments(xmlPath,true);//默认的第二个参数是false,这个是controller的注释,记得修改
            });

红色部分加入代码即可。

 

结果展示:

 

分享图片

相关文章

在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示...
上文已经介绍了Identity Service的实现过程。今天我们继续,...
最近我为我自己的应用开发框架Apworks设计了一套案例应用程序...
HAL(Hypertext Application Language,超文本应用语言)是一...
在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事...
HAL,全称为Hypertext Application Language,它是一种简单的...