使用 Postman 上传 ASP Core WebApi 测试文件
Posted
技术标签:
【中文标题】使用 Postman 上传 ASP Core WebApi 测试文件【英文标题】:ASP Core WebApi Test File Upload using Postman 【发布时间】:2018-04-04 08:46:15 【问题描述】:我创建了一个接收任意文件的端点:
[HttpPost()]
public async Task<IActionResult> CreateFile(IFormFile file)
当我用 Postman 测试它时,file
始终为空。
这是我在 Postman 中所做的:
我做错了什么?
【问题讨论】:
您是否尝试过使用表单数据?你应该有一种方法来“模拟”一个表单,通过指定字段,并添加文件 我也有 Content-Type = application/x-www-form-urlencoded 的标题 我让它与表单数据一起工作。我不需要添加内容类型标题。 【参考方案1】:感谢@rmjoia 的评论,我得到了它的工作!这是我在 Postman 中必须做的事情:
【讨论】:
我也想传输文件,但它帮助了我,谢谢。 @Zeus82 当我在请求中有其他 JSON 参数时,您能否解释或参考任何链接如何传输文件。【参考方案2】:上传文件的完整解决方案如下:
此操作用于上传多个文件:
// Of course this action exist in microsoft docs and you can read it.
HttpPost("UploadMultipleFiles")]
public async Task<IActionResult> Post(List<IFormFile> files)
long size = files.Sum(f => f.Length);
// Full path to file in temp location
var filePath = Path.GetTempFileName();
foreach (var formFile in files)
if (formFile.Length > 0)
using (var stream = new FileStream(filePath, FileMode.Create))
await formFile.CopyToAsync(stream);
// Process uploaded files
return Ok(new count = files.Count, path = filePath);
邮递员图片显示了如何将文件发送到此端点以上传多个文件:
此操作用于上传单个文件:
[HttpPost("UploadSingleFile")]
public async Task<IActionResult> Post(IFormFile file)
// Full path to file in temp location
var filePath = Path.GetTempFileName();
if (file.Length > 0)
using (var stream = new FileStream(filePath, FileMode.Create))
await file.CopyToAsync(stream);
// Process uploaded files
return Ok(new count = 1, path = filePath);
邮递员图片显示了如何将文件发送到此端点以上传单个文件:
【讨论】:
这很好。我能够上传单个文件。但是,您对多个文件的示例,我继续在邮递员中收到错误(以下)。你见过这个吗? "": [ "输入无效。" ] 为了发送多个文件,我不得不将我的方法签名更改为 ... public async Task你应该是这样的
[HttpPost]
public async Task<IActionResult> UploadFile([FromForm]UploadFile updateTenantRequest)
你的班级应该是这样的:-
public class UpdateTenantRequestdto
public IFormFile TenantLogo get; set;
然后
【讨论】:
【参考方案4】: [HttpPost("UploadSingleFile"), Route("[action]")]
public async Task<IActionResult> UploadSingleFile([FromForm(Name = "file")] IFormFile file)
// Process uploaded files
string folderName = "Uploads";
string webRootPath = hostingEnvironment.WebRootPath;
string newPath = Path.Combine(webRootPath, folderName);
if (!Directory.Exists(newPath))
Directory.CreateDirectory(newPath);
Repository.Models.File fileModel = new Repository.Models.File();
fileModel.Name = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
fileModel.Path = $"folderName/file.FileName";
fileModel.Size = file.Length;
fileModel.Type = file.ContentType;
string fullPath = Path.Combine(newPath, fileModel.Name);
fileModel.Extension = Path.GetExtension(fullPath);
fileModel.CreatedDate = Utility.Common.GetDate;
fileModel.CreatedBy = 1;
//fileModel save to db
using (var stream = new FileStream(fullPath, FileMode.Create))
//file.CopyTo(stream);
await file.CopyToAsync(stream);
return Ok(new count = 1, path = filePath );
【讨论】:
欢迎来到 Stack Overflow!请不要只用源代码回答。尝试对您的解决方案如何工作提供一个很好的描述。请参阅:How do I write a good answer?。谢谢以上是关于使用 Postman 上传 ASP Core WebApi 测试文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Postman 使用 cookie 身份验证测试 ASP.NET Core Web API?
Postman 收到简单的 ASP.NET Core Web API 的 404 错误
如何在 IdentityServer ASP.NET Core 中使用 Postman 使用 AntiForgeryToken 调用 API
使用 Postman 登录 Angular ASP.NET CORE 应用程序
即使在使用 ASP.NET CORE Web Api 启用 CORS 后,仍然可以通过 POSTMAN 访问 API [重复]