在ASP.NET Web API中接收字节数组(byte array)是一种常见的需求,特别是在处理文件上传、二进制数据传输等场景。字节数组可以表示任何二进制数据,如图片、PDF文件或其他二进制格式。
这是最直接的方法,适用于较小的二进制数据:
[HttpPost]
public IActionResult PostBytes([FromBody] byte[] data)
{
if (data == null || data.Length == 0)
{
return BadRequest("No data received");
}
// 处理字节数组
return Ok($"Received {data.Length} bytes");
}
当需要同时传递其他参数时:
public class FileUploadModel
{
public byte[] FileData { get; set; }
public string FileName { get; set; }
}
[HttpPost]
public IActionResult UploadFile([FromBody] FileUploadModel model)
{
// 处理模型数据
}
对于文件上传场景更推荐的方式:
[HttpPost]
public async Task<IActionResult> UploadFile(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest("No file uploaded");
}
using (var memoryStream = new MemoryStream())
{
await file.CopyToAsync(memoryStream);
byte[] fileBytes = memoryStream.ToArray();
// 处理字节数组
return Ok($"Received {fileBytes.Length} bytes");
}
}
const byteArray = new Uint8Array([0x01, 0x02, 0x03, 0x04]);
fetch('/api/upload', {
method: 'POST',
headers: {
'Content-Type': 'application/octet-stream'
},
body: byteArray
})
.then(response => response.json())
.then(data => console.log(data));
var byteArray = new byte[] { 0x01, 0x02, 0x03, 0x04 };
using (var client = new HttpClient())
{
var content = new ByteArrayContent(byteArray);
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
var response = await client.PostAsync("https://your-api/api/upload", content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
ASP.NET Core默认限制请求大小为30MB左右。如需上传更大的文件:
// 在Startup.cs中配置
services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 1073741824; // 1GB
});
处理大文件时,考虑使用流式处理:
[HttpPost]
public async Task<IActionResult> UploadLargeFile()
{
using (var stream = Request.Body)
{
// 流式处理数据
}
}
确保客户端发送正确的Content-Type:
application/octet-stream
multipart/form-data
没有搜到相关的文章