我添加了一个上传方法(HTTPPOST)来上传一个简单的文件。我一直收到这个错误,不知道它来自哪里。有人可以解释一下吗?
也许有人可以回答这个问题,这不是最重要的问题,但是你可以将文件扩展名过滤器传递给这个操作过滤器吗?它只接受.csv吗?或者是我们稍后应该在前端做什么,如后端检查它已经上传时的扩展名?
ERROR:1
发布方法:
[HttpPost]
[Consumes("multipart/form-data")]
public void Post(IFormFile file)
{
}
OperationFilter:
public class FormFileOperation : IOperationFilter
{
private const string FormDataMimeType = "multipart/form-data";
private static readonly string[] FormFilePropertyNames = typeof(IFormFile).GetTypeInfo().DeclaredProperties.Select(x => x.Name).ToArray();
public void Apply(Operation operation, OperationFilterContext context)
{
if (context.ApiDescription.ParameterDescriptions.Any(x => x.ModelMetadata.ContainerType == typeof(IFormFile)))
{
var formFileParameters = operation
.Parameters
.OfType<NonBodyParameter>()
.Where(x => FormFilePropertyNames.Contains(x.Name))
.ToArray();
var index = operation.Parameters.IndexOf(formFileParameters.First());
foreach (var formFileParameter in formFileParameters)
{
operation.Parameters.Remove(formFileParameter);
}
var formFileParameterName = context
.ApiDescription
.ActionDescriptor
.Parameters
.Where(x => x.ParameterType == typeof(IFormFile))
.Select(x => x.Name)
.First();
var parameter = new NonBodyParameter()
{
Name = formFileParameterName,
In = "formData",
Description = "The file to upload.",
Required = true,
Type = "file"
};
operation.Parameters.Insert(index, parameter);
if (!operation.Consumes.Contains(FormDataMimeType))
{
operation.Consumes.Add(FormDataMimeType);
}
}
}
}
答案 0 :(得分:0)
这与招摇没有任何关系。 swagger是规范而不是实现。 我会做的单向停止接受任何其他文件扩展名。
这是伪代码,您需要更改并编译它。
[HttpPost("upload")]
public async Task<IActionResult> Upload()
{
files = Request.Files;
foreach (var file in files)
{
if(!file.FileName.EndWith('.csv'))
continue;
Save/UploadFile
}
return Ok();
}
对于文件上传,我不会过度设计它。