mvc的[FromBody]参数是null

[FromBody]一直没去研究到底是啥玩意,以为是只能在from表单里的参数,一直也没去加这个,直接都是 func(string name,int id){...}

今天用别人的代码,发现这个问题,才去了解了下,也没看出个什么鬼

貌似那些基本的数据类型,string、int、datetime、bool,加了[FromBody],去访问,参数都是null

加一个实体集

public class DeleteReq{  public string id { get; set; } }

public Response Delete([FromBody]DeleteReq request)

或者用数组

public Response Delete([FromBody]string[] ids)

这类的是阔以访问的

[FromBody]是以josn格式的字符串的形式传递,contentType是application/json

[FromQuery]是GET方式在URL后key=value&key=value的方式

[FromForm]是传统的HTML表单提交,现在用的比较少了

当你在Web API中处理从客户端(如浏览器或POST请求)通过`multipart/form-data`格式上传的文件时,`FromBody`关键字非常有用。这个关键字告诉API控制器如何将HTTP请求体中的数据解析为模型对象,包括文件字段。 假设你有一个简单的API控制器,名为`FileUploadController`,它接收一个包含文件的`IList<File>`类型的参数。`File`可能是你定义的一个简单模型类,用来表示上传的文件: ```csharp using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using YourNamespace.Models; // 假设你有 FileModel 类 [Route("api/[controller]")] [ApiController] public class FileUploadController : ControllerBase { [HttpPost] public IActionResult UploadFiles([FromForm] IList<File> files) { if (files == null || files.Count == 0) { return BadRequest("No files were uploaded."); } foreach (var file in files) { // 处理文件,比如保存到服务器或执行其他操作 string filePath = SaveUploadedFile(file); if (filePath != null) { return CreatedAtAction(nameof(GetUploadedFile), new { id = filePath }, file.FileName); } else { return StatusCode(500, "Failed to save the file"); } } return Ok(); } private string SaveUploadedFile(File file) { // 这里你可能需要实现将文件保存到服务器的具体逻辑 // 可能涉及到写入磁盘或存储服务,例如: var physicalPath = Path.Combine(Server.MapPath("~/uploads/"), file.FileName); using (var stream = file.InputStream) { File.WriteAllBytes(physicalPath, stream.ToArray()); } return physicalPath; } } ``` 在这个例子中,`[FromForm]`属性表示控制器方法期望接收到的是表单数据,其中`files`参数就是包含多个文件的列表。`SaveUploadedFile`方法用于处理每个上传的文件。 要创建一个`File`模型,你可以这样做: ```csharp public class File { public IFormFile InputStream { get; set; } // 用于读取二进制流的文件 public string FileName { get; set; } // 文件名 } ``` 客户端发送POST请求时,你需要构造一个包含`multipart/form-data`的请求头,并确保`file`字段的值是一个二进制流(通常来自<input type="file">元素): ```http POST /api/fileupload HTTP/1.1 Content-Type: multipart/form-data; boundary=------------------------WebKitFormBoundary7MA4YWxkTrZu0gW ------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="files"; filename="myFile.jpg" Content-Type: image/jpeg ... file data ... ------WebKitFormBoundary7MA4YWxkTrZu0gW-- ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值