C# 如何以编程方式将.NET 5中的文件上载到.NET 5 Rest API而不丢失内容?
我创建了一个.NET5RESTAPI。我可以很容易地从斯威格上传文件。这很好。调试时,我可以看到字节数组不是空的。以下是控制器方法:C# 如何以编程方式将.NET 5中的文件上载到.NET 5 Rest API而不丢失内容?,c#,asp.net-core,http-post,asp.net-core-webapi,.net-5,C#,Asp.net Core,Http Post,Asp.net Core Webapi,.net 5,我创建了一个.NET5RESTAPI。我可以很容易地从斯威格上传文件。这很好。调试时,我可以看到字节数组不是空的。以下是控制器方法: [Route("api/[controller]")] [ApiController] public class ImageController : ControllerBase { // POST api/<ImageController> [HttpPost] public void Post([Fro
[Route("api/[controller]")]
[ApiController]
public class ImageController : ControllerBase
{
// POST api/<ImageController>
[HttpPost]
public void Post([FromForm] UserModel info)
{
var memoryStream = new MemoryStream();
info.Avatar.CopyTo(memoryStream);
var bytes = memoryStream.ToArray();
}
}
我还尝试以编程方式上载文件。这并不完全有效。在控制器方法中放置断点时,我看到字节数组是空的。因此,调用本身正在工作,但数据没有输入
下面是用于上载文件的.NET5控制台应用程序的源代码
如前所述,这做了一些有用的事情,因为它真正调用了restapi,我可以通过在controller方法中放置断点看到它。但是,我的控制器方法不获取任何数据。字节数组为空
private static async Task TryUpload()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:5000");
string filePath = "C:\\Users\\daan1982\\Pictures\\RiderStart.png";
var fileStream = File.Create(filePath);
using (var content =
new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture)))
{
content.Add(new StreamContent(fileStream), "avatar", "RiderStart.png");
var result = await client.PostAsync("/api/Image", content);
var request = result.RequestMessage;
}
}
}
static async Task Main(string[] args)
{
await TryUpload();
Console.WriteLine("Hello World!");
}
正如我在上传和请求模型中将内容命名为“avatar”,这应该可以正常工作。但是,它确实可以工作,但并不好,因为字节数组总是空的
我做错了什么?我如何解决这个问题?
你可能想要。我就是这么想的
static async Task Main(string[] args)
{
await TryUpload();
}
private const string Boundary = "EAD567A8E8524B2FAC2E0628ABB6DF6E";
private static readonly HttpClient HttpClient = new()
{
BaseAddress = new Uri("https://localhost:5001/")
};
private static async Task TryUpload()
{
var requestContent = new MultipartFormDataContent(Boundary);
requestContent.Headers.Remove("Content-Type");
requestContent.Headers.TryAddWithoutValidation("Content-Type", $"multipart/form-data; boundary={Boundary}");
var fileContent = await File.ReadAllBytesAsync(@"<path to file\Unbenannt.PNG");
var byteArrayContent = new ByteArrayContent(fileContent);
byteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png");
requestContent.Add(byteArrayContent, "avatar", "Unbenannt.PNG");
var postResponse = await HttpClient.PostAsync("/api/Image", requestContent);
}
static async Task Main(字符串[]args)
{
等待TryUpload();
}
私有常量字符串边界=“EAD567A8E8524B2FAC2E0628ABB6DF6E”;
私有静态只读HttpClient HttpClient=new()
{
BaseAddress=新Uri(“https://localhost:5001/")
};
专用静态异步任务TryUpload()
{
var requestContent=新的MultipartFormDataContent(边界);
requestContent.Headers.Remove(“内容类型”);
requestContent.Headers.TryAddWithoutValidation(“内容类型”,$“多部分/表单数据;边界={boundary}”);
var fileContent=await File.readAllByteAsync(@)
static async Task Main(string[] args)
{
await TryUpload();
}
private const string Boundary = "EAD567A8E8524B2FAC2E0628ABB6DF6E";
private static readonly HttpClient HttpClient = new()
{
BaseAddress = new Uri("https://localhost:5001/")
};
private static async Task TryUpload()
{
var requestContent = new MultipartFormDataContent(Boundary);
requestContent.Headers.Remove("Content-Type");
requestContent.Headers.TryAddWithoutValidation("Content-Type", $"multipart/form-data; boundary={Boundary}");
var fileContent = await File.ReadAllBytesAsync(@"<path to file\Unbenannt.PNG");
var byteArrayContent = new ByteArrayContent(fileContent);
byteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png");
requestContent.Add(byteArrayContent, "avatar", "Unbenannt.PNG");
var postResponse = await HttpClient.PostAsync("/api/Image", requestContent);
}