我想使用C#HttpClient发送图像,在ASP.NET Core控制器中接收它并将其保存到磁盘。我尝试了各种方法,但我进入控制器的所有操作都是null引用。
我的http客户端:
public class HttpClientAdapter
{
private readonly HttpClient _client;
public HttpClientAdapter()
{
_client = new HttpClient();
}
public async Task<HttpResponse> PostFileAsync(string url, string filePath)
{
var requestContent = ConstructRequestContent(filePath);
var response = await _client.PostAsync(url, requestContent);
var responseBody = await response.Content.ReadAsStringAsync();
return new HttpResponse
{
StatusCode = response.StatusCode,
Body = JsonConvert.DeserializeObject<JObject>(responseBody)
};
}
private MultipartFormDataContent ConstructRequestContent(string filePath)
{
var content = new MultipartFormDataContent();
var fileStream = File.OpenRead(filePath);
var streamContent = new StreamContent(fileStream);
var imageContent = new ByteArrayContent(streamContent.ReadAsByteArrayAsync().Result);
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
content.Add(imageContent, "image", Path.GetFileName(filePath));
return content;
}
}
和控制器:
[Route("api/files")]
public class FilesController: Controller
{
private readonly ILogger<FilesController> _logger;
public FilesController(ILogger<FilesController> logger)
{
_logger = logger;
}
[HttpPost]
public IActionResult Post(IFormFile file)
{
_logger.LogInformation(file.ToString());
return Ok();
}
}
如上所述,我在控制器中获取的IFormFile对象为空引用。我尝试添加[FromBody],[FromForm],并尝试创建具有两个属性的类:一个类型为字符串,另一个类型为IFormFile,但是没有任何效果。同样,我不是使用C#HttpClient发送文件,而是使用邮递员-会发生同样的事情。
有人知道这个问题的解决方案吗?提前致谢。
答案 0 :(得分:2)
表单字段的名称必须与属性名称匹配:
content.Add(imageContent, "file", Path.GetFileName(filePath));
file 而不是 image ,因为您在
中使用 file
public IActionResult Post(IFormFile file)
{
}