gpt4 book ai didi

asp.net-web-api - IFormFile 的 Asp.Net Core swagger 帮助页面

转载 作者:行者123 更新时间:2023-12-02 03:21:28 28 4
gpt4 key购买 nike

我正在尝试设置 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 生成不允许测试它的帮助页面 Wrong swagger ui为了解决这个问题我写了下一个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" };
}
}

在这一切之后,一切都按照我对 swagger 的期望进行。 Correct swagger ui

目前这个解决方案对我有用,但感觉不对。也许我缺少一些简单的解决方案。此外,此方法不使用 IFormFile 或其他方式处理 List 或复杂对象属性。

最佳答案

对于 ASP.NET Core 开发人员来说,Swashbuckle.AspNetCore GitHub 存储库中为此写了一个问题: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/193 。它在评论中也有一些用于操作过滤器的工作代码——其中一个对我来说比这个问题中的其他代码更有效。

关于asp.net-web-api - IFormFile 的 Asp.Net Core swagger 帮助页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36892604/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com