Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式将.NET 5中的文件上载到.NET 5 Rest API而不丢失内容?_C#_Asp.net Core_Http Post_Asp.net Core Webapi_.net 5 - Fatal编程技术网

C# 如何以编程方式将.NET 5中的文件上载到.NET 5 Rest API而不丢失内容?

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

我创建了一个.NET5RESTAPI。我可以很容易地从斯威格上传文件。这很好。调试时,我可以看到字节数组不是空的。以下是控制器方法:

[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);
    }