必须使用 HttpClient C# 上传带有注册表数据的图像

Have to upload image with registration form data using HttpClient C#

我有 .Net Core 3.1 Api 端点,它将 UserData 作为 [FromForm]。

我也在此处上传图片,运行 使用邮递员很好。图片上传和用户数据插入数据库。

但是当我调用 HttpClint.PostAsync 时它不起作用,而我正在使用 MultipartFormDataContent();

API 的 EndPoing 签名:

public async Task<IActionResult> SaveUser([FromForm] UserData usr) 
{}

Xamarin 端的图片上传代码:

  private async Task UploadFileMedia()
    {
        Constant.mediaFile = null;
        await CrossMedia.Current.Initialize();
        Constant.mediaFile = await CrossMedia.Current.PickPhotoAsync();

        if (Constant.mediaFile is null)
            return;
    }

Http 客户端命中:

var requestContent = new MultipartFormDataContent()
                    {

                    new StringContent(JsonConvert.SerializeObject(dictionary), Encoding.UTF8, "application/json"),
                        {new StreamContent(Constant. mediaFile.GetStream()),
                            "\"file\"",
                            $"\"{Constant.mediaFile.Path}\""}
                    };
                    requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    requestContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");


 var response = await client.PostAsync("api/user/save", requestContent);

您有一个接受类型 application/x-www-url-formencoded 的属性 [FromForm] UserData usr,但您发送的数据为 application/json,您需要将绑定属性更改为 [FromBody] 您可以阅读关于这里的差异

当然还有official web site

如果您想向您的 ASP.NET 核心 API 后端发送图像文件和 json 数据请求,您可以参考以下代码片段.

requestContent.Add(new StringContent(JsonConvert.SerializeObject(dictionary), Encoding.UTF8, "application/json"), "Prop1");
requestContent.Add(new StreamContent({your_filestream_here}), "file", System.IO.Path.GetFileName(filepath));


var response = await client.PostAsync("/api/user/save", requestContent);

UserData class

public class UserData
{
    public string Prop1 { get; set; }
    public IFormFile file { get; set; }
}

测试结果