【问题标题】:How to receive a file in ASP.NET Core controller如何在 ASP.NET Core 控制器中接收文件
【发布时间】:2018-07-24 20:23:48
【问题描述】:

我想用 C# HttpClient 发送一个图像,在 ASP.NET Core 控制器中接收它并将它保存到磁盘。我尝试了各种方法,但我在控制器中得到的只是空引用。

我的 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 发送文件,而是使用 Postman - 发生同样的事情。

有人知道这个问题的解决方案吗?提前致谢。

【问题讨论】:

标签: c# file asp.net-web-api httprequest httpclient


【解决方案1】:

表单字段的名称必须与属性名称匹配:

content.Add(imageContent, "file", Path.GetFileName(filePath));

file 而不是 image,因为您使用 file in

public IActionResult Post(IFormFile file)
{
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多