必须使用 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] 您可以阅读关于这里的差异
如果您想向您的 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; }
}
测试结果
我有 .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] 您可以阅读关于这里的差异
如果您想向您的 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; }
}
测试结果