如何使用Swagger上传文件
前言
随着前后端分离开发模式的普及,后端人员更多是编写服务端api接口。调用接口实现文件上传是一个常见的功能,同时也需要一个选择文件上传的界面,可以编写前端界面上传,可以使用postman、curl来模拟上传请求。上述的方式多多少少有点麻烦。swagger作为api说明文档及调试工具,如果它能提供文件上传的界面(默认不提供),那会更加方便文件上传提示,本文将介绍如何使用swagger来上传文件。
步骤
1. 安装swagger
install-package swashbuckle.aspnetcore
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方法:
put方法:
原理解析
使用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上传文件,希望对大家有所帮助
下一篇: 浅谈C#中简单的异常引发与处理操作