asp.net-web-api – 用于IFormFile的Asp.Net Core swagger帮助页
发布时间:2020-12-16 06:55:11 所属栏目:asp.Net 来源:网络整理
导读:我试图设置swagger来测试具有IFormFile属性的模型. 例如,我有下一个api方法 [HttpPost]public ApiResultUserModel SaveTestFileData([FromForm]TestPostFileArgs args){ var result = new UserModel() { Id = 1,Name = $"SaveTestFileData {args.UserId} com
我试图设置swagger来测试具有IFormFile属性的模型.
例如,我有下一个api方法 [HttpPost] public ApiResult<UserModel> SaveTestFileData([FromForm]TestPostFileArgs args) { var result = new UserModel() { Id = 1,Name = $"SaveTestFileData {args.UserId} company: {args.CompanyId},file length: {args.CompanyFile.Length}" }; return ApiResult.Success(result); } 和我的参数模型 public class TestPostFileArgs { public int UserId { get; set; } public int? CompanyId { get; set; } public IFormFile CompanyFile { get; set; } } 默认情况下,swagger生成帮助页面,不允许对其进行测试 为了解决这个问题,我写了下一个OperationFilter public class FormFileOperationFilter: IOperationFilter { public void Apply(Operation operation,OperationFilterContext context) { if (operation.Parameters == null) return; var fileParamNames = context.ApiDescription.ActionDescriptor.Parameters .SelectMany(x => x.ParameterType.GetProperties()) .Where(x => x.PropertyType.IsAssignableFrom(typeof (IFormFile))) .Select(x => x.Name) .ToList(); if (!fileParamNames.Any()) return; var paramsToRemove = new List<IParameter>(); foreach (var param in operation.Parameters) { paramsToRemove.AddRange(from fileParamName in fileParamNames where param.Name.StartsWith(fileParamName + ".") select param); } paramsToRemove.ForEach(x => operation.Parameters.Remove(x)); foreach (var paramName in fileParamNames) { var fileParam = new NonBodyParameter { Type = "file",Name = paramName,In = "formData" }; operation.Parameters.Add(fileParam); } foreach (IParameter param in operation.Parameters) { param.In = "formData"; } operation.Consumes = new List<string>() { "multipart/form-data" }; } } 在这种情况发生之后,正如我所期待的那样. 目前这个解决方案适合我,但感觉不对.也许我错过了一些简单的解决方案.此方法也不使用IFormFile或其他方法处理List或复杂对象属性. 解决方法
我有同样的问题,你的解决方案帮助了我.
我刚刚更改了OperationFilter,因为我的IFormFile参数不是嵌套参数,而是action方法的主要参数. public class AddFileUploadParams : IOperationFilter { public void Apply(Operation operation,OperationFilterContext context) { if (operation.Parameters == null) return; var formFileParams = context.ApiDescription.ActionDescriptor.Parameters .Where(x => x.ParameterType.IsAssignableFrom(typeof(IFormFile))) .Select(x => x.Name) .ToList(); ; var formFileSubParams = context.ApiDescription.ActionDescriptor.Parameters .SelectMany(x => x.ParameterType.GetProperties()) .Where(x => x.PropertyType.IsAssignableFrom(typeof(IFormFile))) .Select(x => x.Name) .ToList(); var allFileParamNames = formFileParams.Union(formFileSubParams); if (!allFileParamNames.Any()) return; var paramsToRemove = new List<IParameter>(); foreach (var param in operation.Parameters) { paramsToRemove.AddRange(from fileParamName in allFileParamNames where param.Name.StartsWith(fileParamName + ".") select param); } paramsToRemove.ForEach(x => operation.Parameters.Remove(x)); foreach (var paramName in allFileParamNames) { var fileParam = new NonBodyParameter { Type = "file",In = "formData" }; operation.Parameters.Add(fileParam); } foreach (IParameter param in operation.Parameters) { param.In = "formData"; } operation.Consumes = new List<string>() { "multipart/form-data" }; } } 我想你使用SwashBuckle生成招摇.如果swashBuckle会处理这个问题会很好.如果我还有时间,也许我会做出贡献. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- entity-framework – 从Entity Framework 6升级到EF Core
- 在ASP.NET或ASP.NET MVC中生成管理界面
- asp.net – 在代码后面和SqlDataSource中编写查询
- asp.net – 使用Python Mechanize进行屏幕分析aspx – Java
- asp.net-mvc – 如何在asp.net中使用Captcha mvc
- asp.net-mvc – 在剑道调度程序中设置星期一到星期一的第一
- asp.net-mvc – Html.DisplayFor不发布值到控制器在ASP.NET
- 有人可以向我介绍asp.net路由语法吗?
- asp.net-mvc – 在控制器外部生成路由,类似于Url.RouteUrl(
- asp.net-mvc – 我必须做什么才能从MVC控制器重定向到Web窗
推荐文章
站长推荐
- asp.net-mvc – 如何使用EF Code First解释为枚举
- asp.net – 未捕获TypeError:无法读取未定义的属
- 一步步开发自己的博客 .NET版(4、文章发布功能
- asp.net-mvc – 什么时候应该在asp.net mvc 2中使
- 配置文件_自定义section标签获取数据
- asp.net – 无法将HttpHandler映射到“路径/ *”
- asp.net-mvc-3 – MVC 3 html.TextBoxFor readon
- 基于ASP.NET+EasyUI框架实现图片上传提交表单功能
- asp.net – web.config转换中的匹配元素名称
- 实体框架 – 我们如何使用Breeze的本地时区生存
热点阅读