asp.net-core – ASPNetCore – 通过REST上传文件
我正在使用Insomnia来测试API,但Postman也是如此.
我想用以下控制器测试文件上传: public async Task<IActionResult> Post([FromForm]IFormFile File) 如果我将请求设置为多部分请求: 有用. 但是,如果我将其设置为二进制文件: 我不知道如何获取数据.怎么做到呢? 另外,在控制器方法的签名中,如果我将[FromForm]更改为[FromBody],我就不会获取数据. 有人可以为我澄清一下吗? 解决方法
正如您已经注意到的那样,在Postman / Insomnia中使用二进制文件选项并不是标准方式.通过RESTful API上传文件有三种不同的方法,您必须选择一种方法.
我已经包含了将上传的文件内容读取到字符串并输出的代码片段 – 尝试发送文本文件,您应该在200响应中获取该文件的内容. 表单数据上传 这是最常用/众所周知的上传方法,将您发送的数据格式化为一组键/值对.您通常需要在请求中将Content-Type指定为multipart / form-data,然后使用MVC中的[FromForm]属性将值绑定到变量.此外,您可以使用内置的IFormFile类来访问上传的文件. [HttpPost] public async Task<IActionResult> PostFormData([FromForm] IFormFile file) { using (var sr = new StreamReader(file.OpenReadStream())) { var content = await sr.ReadToEndAsync(); return Ok(content); } } 正文上传 您可以以MVC理解的格式发送正文,例如JSON,并将文件嵌入其中.通常,文件内容将使用Base64或其他编码进行编码,以防止出现字符编码/解码问题,尤其是在发送图像或二进制数据时.例如. { "file": "MTIz" } 然后在控制器中指定[FromBody],并使用类进行模型反序列化. [HttpPost] public IActionResult PostBody([FromBody] UploadModel uploadModel) { var bytes = Convert.FromBase64String(uploadModel.File); var decodedString = Encoding.UTF8.GetString(bytes); return Ok(decodedString); } // ... public class UploadModel { public string File { get; set; } } 使用大型和非文本文件时,JSON请求变得笨拙且难以阅读. 二进制文件 这里的关键是你的文件是整个请求.该请求不包含任何其他信息,以帮助MVC将值绑定到代码中的变量.因此,要访问该文件,您需要在Request中读取Body. [HttpPost] public async Task<IActionResult> PostBinary() { using (var sr = new StreamReader(Request.Body)) { var body = await sr.ReadToEndAsync(); return Ok(body); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.Net MVC帮助重构
- 是否可以运行异步调用来在ASP.NET中设置会话?
- asp.net – IIS(动态和静态)缓存,OutPutCache和浏览器缓存之
- asp.net – 通过web.config覆盖machine.config
- asp.net-mvc – 带tab-id的RedirectToAction()
- tsql – “无法更改具有Command对象作为其源的Recordset对象
- asp.net-mvc – 如何在.NET MVC3 HTML表单中的必需可空Date
- asp.net-mvc – MVC2 Binding不适用于Html.DropDownListFor
- asp.net – 无效的回发或回调参数.单击按钮时
- asp.net – 断点当前不会被命中 – 没有可执行代码与此行相
- .net – 包恢复失败.回滚包更改 – Serilog.AspN
- asp.net – UserControl Viewstate在回发后丢失所
- asp.net – 在ObjectDataSource更新事件期间取消
- asp.net – 如何添加jQuery UI按钮图标到输入按钮
- 如何在我的ASP.NET应用程序中创建“通用错误”页
- asp.net – “无法在Web服务器上启动调试”MSVSM
- asp.net – 使用div标签在一行上的两个元素?
- asp.net-web-api – 我什么时候应该在Web api中使
- 点击图片,AJAX删除后台图片文件的实现代码(asp.n
- asp.net-mvc – MVC 3多个DisplayFor-Templates