如何使用swagger上传文件
创始人
2024-11-27 19:22:00
0次

 1安装swagger

nuget安装Swashbuckle.AspNetCore.Swagger组件

2设置生成xml

右键项目>属性>生成

如何使用swagger上传文件

相应的把其他需要生成文档说明的项目也按上步骤进行设置xml

关键swagger代码

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.PlatformAbstractions;
using Swashbuckle.AspNetCore.Swagger;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace Chaunce.Api.App_Start
{
 /// 
 /// SwaggerConfig
 /// 
 public class SwaggerConfig
 {
  /// 
  /// InitSwagger
  /// 
  /// 
  public static void InitSwagger(IServiceCollection services)
  {
   services.AddSwaggerGen(c =>
   {
    c.OperationFilter();//增加文件过滤处理
    var security = new Dictionary> { { "Bearer", new string[] { } }, };
    c.AddSecurityRequirement(security);//添加一个必须的全局安全信息,和AddSecurityDefinition方法指定的方案名称要一致,这里是Bearer。
    var basePath = PlatformServices.Default.Application.ApplicationBasePath;// 获取到应用程序的根路径
    var xmlApiPath = Path.Combine(basePath, "Chaunce.Api.xml");//api文件xml(在以上步骤2设置生成xml的路径)
    var xmlModelPath = Path.Combine(basePath, "Chaunce.ViewModels.xml");//请求modelxml
    c.IncludeXmlComments(xmlApiPath);
    c.IncludeXmlComments(xmlModelPath);
    c.SwaggerDoc("v1", new Info
    {
     Title = "Chaunce数据接口",
     Version = "v1",
     Description = "这是一个webapi接口文档说明",
     TermsOfService = "None",
     Contact = new Contact { Name = "Chaunce官网", Email = "info@Chaunce.com", Url = "http://blog.Chaunce.top/" },
     License = new License
     {
      Name = "Swagger官网",
      Url = "http://swagger.io/",
     }
    });
    c.IgnoreObsoleteActions();
    c.AddSecurityDefinition("Bearer", new ApiKeyScheme
    {
     Description = "权限认证(数据将在请求头中进行传输) 参数结构: \"Authorization: Bearer {token}\"",
     Name = "Authorization",//jwt默认的参数名称
     In = "header",//jwt默认存放Authorization信息的位置(请求头中)
     Type = "apiKey"
    });//Authorization的设置
   });
  }
  /// 
  /// ConfigureSwagger
  /// 
  /// 
  public static void ConfigureSwagger(IApplicationBuilder app)
  {
   app.UseSwagger();
   // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint.
   app.UseSwagger(c =>
   {
    c.RouteTemplate = "docs/{documentName}/docs.json";//使中间件服务生成Swagger作为JSON端点(此处设置是生成接口文档信息,可以理解为老技术中的webservice的soap协议的信息,暴露出接口信息的地方)
    c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Info.Description = httpReq.Path);//请求过滤处理
   });
   app.UseSwaggerUI(c =>
   {
    c.RoutePrefix = "docs";//设置文档首页根路径
    c.SwaggerEndpoint("/docs/v1/docs.json", "V1");//此处配置要和UseSwagger的RouteTemplate匹配
    //c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1");//默认终结点
    c.InjectStylesheet("/swagger-ui/custom.css");//注入style文件
   });
  }
 }
}

swagger过滤器

using Microsoft.AspNetCore.Http;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Chaunce.Api.Help
{
 /// 
 /// swagger文件过滤器
 /// 
 public class SwaggerFileUploadFilter : IOperationFilter
 {
  /// 
  /// swagger过滤器(此处的Apply会被swagger的每个接口都调用生成文档说明,所以在此处可以对每一个接口进行过滤操作)
  /// 
  /// 
  /// 
  public void Apply(Operation operation, OperationFilterContext context)
  {
   if (!context.ApiDescription.HttpMethod.Equals("POST", StringComparison.OrdinalIgnoreCase) &&
   !context.ApiDescription.HttpMethod.Equals("PUT", StringComparison.OrdinalIgnoreCase))
   {
    return;
   }
   var apiDescription = context.ApiDescription;
   var parameters = context.ApiDescription.ParameterDescriptions.Where(n => n.Type == typeof(IFormFileCollection) || n.Type == typeof(IFormFile)).ToList();//parameterDescriptions包含了每个接口所带所有参数信息
   if (parameters.Count() <= 0)
   {
    return;
   }
   operation.Consumes.Add("multipart/form-data");
   foreach (var fileParameter in parameters)
   {
    var parameter = operation.Parameters.Single(n => n.Name == fileParameter.Name);
    operation.Parameters.Remove(parameter);
    operation.Parameters.Add(new NonBodyParameter
    {
     Name = parameter.Name,
     In = "formData",
     Description = parameter.Description,
     Required = parameter.Required,
     Type = "file",
     //CollectionFormat = "multi"
    });
   }
  }
 }
}

如何使用swagger上传文件

如何使用swagger上传文件

打开浏览器http://localhost:8532/docs/

如何使用swagger上传文件

如何使用swagger上传文件

还没有结束,我们看看如何让Jwt的认证信息自动存在请求头免去每次手动塞

点击

如何使用swagger上传文件

如何使用swagger上传文件

(实际情况是填写的信息格式是:Bearer *************(Bearer与后面信息有一个空格))

 此时随意访问任何api,都会将以上信息自动塞入header中进行请求,如下验证

如何使用swagger上传文件

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...