欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何使用Swagger上传文件

程序员文章站 2022-05-26 10:51:02
前言    随着前后端分离开发模式的普及,后端人员更多是编写服务端api接口。调用接口实现文件上传是一个常见的功能,同时也需要一个选择文件上传的界面,可以编写前...

前言

   随着前后端分离开发模式的普及,后端人员更多是编写服务端api接口。调用接口实现文件上传是一个常见的功能,同时也需要一个选择文件上传的界面,可以编写前端界面上传,可以使用postman、curl来模拟上传请求。上述的方式多多少少有点麻烦。swagger作为api说明文档及调试工具,如果它能提供文件上传的界面(默认不提供),那会更加方便文件上传提示,本文将介绍如何使用swagger来上传文件。

步骤

1. 安装swagger

install-package swashbuckle.aspnetcore

如何使用Swagger上传文件

2. 配置swagger中间件

在startup.configureservices中添加:

services.addswaggergen(c =>
{
 c.swaggerdoc("v1", new info { title = "my api", version = "v1" });
});

在startup.configure中添加:

app.useswagger();
app.useswaggerui(c =>
{
 c.swaggerendpoint("/swagger/v1/swagger.json", "my api v1");
});

3. 编写api

// post api/values
[httppost]
public void post(iformfile file)
{
 //todo:save file...
}
// put api/values/5
[httpput("{id}")]
public void put(int id, iformfile file)
{
 //todo:save file...
}

4. 编写swaggerfileuploadfilter

public class swaggerfileuploadfilter : ioperationfilter
{
 public void apply(operation operation, operationfiltercontext context)
 {
  if (!context.apidescription.httpmethod.equals("post", stringcomparison.ordinalignorecase) &&
   !context.apidescription.httpmethod.equals("put", stringcomparison.ordinalignorecase))
  {
   return;
  }
  var fileparameters = context.apidescription.actiondescriptor.parameters.where(n => n.parametertype == typeof(iformfile)).tolist();
  if (fileparameters.count < 0)
  {
   return;
  }
  operation.consumes.add("multipart/form-data");
  foreach (var fileparameter in fileparameters)
  {
   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"
   });
  }
 }
}

5. 注册swaggerfileuploadfilter

c.operationfilter<swaggerfileuploadfilter>();

6. 查看结果

post方法:

如何使用Swagger上传文件

如何使用Swagger上传文件

put方法:

如何使用Swagger上传文件

如何使用Swagger上传文件

原理解析

  使用swagger的文件上传的关键在于swaggerfileuploadfilter,它继承于swashbuckle的ioperationfilter,也即它只作用于swagger,不会对其它模块造成影响。

  我们再来看一下swaggerfileuploadfilter里面的apply方法的逻辑:

  1. 判断请求的方法是否为post或者put,如果是其它请求方法,基本不可能是文件上传操作。

  2. 查找方法中类型为iformfile的参数。

  3. 设置consumes为“multipart/form-data”。

  4. 替换iformfile类型参数描述中的in为formdata、type为file。

源码地址

https://github.com/erikxu/.netcoretips/tree/master/swaggerfileupload

参考资料

总结

以上所述是小编给大家介绍的如何使用swagger上传文件,希望对大家有所帮助