Asp.Net Core SwaggerUI 接入

Asp.Net Core SwaggerUI 接入

简单了解

swagger的目的简单来讲就是,不用为每一个接口手动写接口文档,由于它是根据接口自动生成的,接口更改时文档也同步更新,减小了手动更新的麻烦和遗漏。同时也提供了接口的调试等功能,你不用打开postman等接口测试软件来测试接口;若是有写备注的话,接口、入参和输出都有详细的备注说明,调用接口的人也能更加直观的读懂接口。沟通效率和工做效率也会大大提高。web

Swagger接入的步骤:

  1. 注册Swagger生成器:services.AddSwaggerGen().
  2. 插入中间件,将生成的Swagger公开为JSON节点:app.UseSwagger()
  3. 插入Swagger-UI中间件,将指定的swagger json端点为其提供支持:app.UseSwaggerUI()

1、添加Nuget包

Package Manager : Install-Package Swashbuckle.AspNetCore
或
CLI : dotnet add package Swashbuckle.AspNetCore

2、注册swagger文档服务

  • 注意

  1. 若是mvc使用的是services.AddMvcCore(),则须要手动添加ApiExplorer,由于SwashBuckle强烈依赖于ApiExplorer,ApiExplorer用来发现控制器中的接口方法。须要手动添加。如:
    services.AddMvcCore().AddApiExplorer();json

  2. 若是使用的是services.AddMvc(),则不须要再进行注册。由于AddMvc()中已经添加了ApiExplorer。如:c#

    public static IMvcBuilder AddMvc(this IServiceCollection services)
        {
            if (services == null)
                throw new ArgumentNullException(nameof (services));
            IMvcCoreBuilder builder = services.AddMvcCore();
            builder.AddApiExplorer();//在这里
            builder.AddAuthorization();
            MvcServiceCollectionExtensions.AddDefaultFrameworkParts(builder.PartManager);
            builder.AddFormatterMappings();
            builder.AddViews();
            builder.AddRazorViewEngine();
            builder.AddRazorPages();
            builder.AddCacheTagHelper();
            builder.AddDataAnnotations();
            builder.AddJsonFormatters();
            builder.AddCors();
            return (IMvcBuilder) new MvcBuilder(builder.Services, builder.PartManager);
        }
  3. 何时用AddMvc(),何时用AddMvcCore()呢?
    经过AddMvc()的方法中咱们应该能够发现,里面有添加ViewRazorTagHelper服务,这些在WebApi项目中是用不到的。因此:
    1).若是你的项目是mvc web程序,则使用AddMvc().
    2).若是的项目是webapi,则使用AddMvcCore(),而后酌情添加须要的其它服务;固然使用AddMvc()也没有问题。api

  • 添加Swagger服务

services.AddSwaggerGen(options =>
{
    options.SwaggerDoc(AppDefaults.ApiDocumentName, new Info
    {
        Title = AppDefaults.ApiDocumentTitle,
        Description = AppDefaults.ApiDocumentDescription,
        Version = typeof(Startup).Assembly.GetName().Version.ToString()
    });
    //加载注释文件
    Directory.GetFiles(Environment.ContentRootPath, "*.xml", SearchOption.AllDirectories)
        .ToList()
        .ForEach(f => options.IncludeXmlComments(f));
});

3、添加管道

//生成swagger-json文件,并重定义swagger-json文件路由模板,这里我修改了 swagger-json 的路由模板。
//若是不自定义的话,默认是 swagger/{documentName}/swagger.json
app.UseSwagger(options => options.RouteTemplate = "{documentName}/swagger.json");

app.UseSwaggerUI(options =>
{
    //指定生成swagger-json文件路径,为SwaggerUI提供数据。
    //若是上边路由模板没有自定义,则完成路径是 /swagger/{AppDefaults.ApiDocumentName}/swagger.json
    options.SwaggerEndpoint($"/{AppDefaults.ApiDocumentName}/swagger.json", AppDefaults.ApiDocumentName);

    //自定义SwaggerUI页面路由前缀
    //地址栏输入 http://loacalhost:5000/lxp  就能够打开SwaggerUI页面
    options.RoutePrefix = "lxp";
});

4、定义接口

  • 若是想要控制器在Swagger中显示,全部控制器必须使用属性路由
  • 接口方法要使用 Http 属性和 From 特性标注

例如:mvc

[Route("[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        [HttpGet("name")]
        public async Task<ActionResult<string>> GetNameAsync([FromQuery] string name)
        {
            if (!string.IsNullOrEmpty(name))
            {
                ModelState.TryAddModelError(nameof(name), $"{nameof(name)} can not be empty");
            }

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            return await Task.FromResult(name);
        }
    }

补充:

  • AppDefaults 是我定义一个常量的类
相关文章
相关标签/搜索