Почему файл IFormFile = null? - PullRequest
0 голосов
/ 07 февраля 2019
[Route("api/file")]
[Produces("application/json")]
[Consumes("application/json", "application/json-patch+json", "multipart/form-data")]
[ApiController]
public class FileController : ControllerBase
{
    public FileController()
    {
    }

    [HttpPost]
    public async Task<IActionResult> PostProfilePicture([FromQuery]IFormFile file)
    {
        var stream = file.OpenReadStream();
        var name = file.FileName;
        return null;
    }
}

Почтальон

enter image description here

Отладка

enter image description here

В конце файла = null Как решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Вы отправляете это как x-www-form-urlencoded.Вы должны отправить его как multipart/form-data.Загрузка файлов возможна только в этом режиме, поэтому IFormFile будет null во всех других режимах.

x-www-form-urlencoded - это режим по умолчанию, который используется только для отправки кодированных пар ключ / вейл в теле запроса..

Также [FromQuery] не требуется, поскольку вы не можете загружать файлы с помощью параметров запроса.

0 голосов
/ 07 февраля 2019

Полагаю, вы получаете ноль от IFormFile, потому что вы указываете обязательные атрибуты для этой операции в классе Controller, а не в методе controller.Обновление кода, как показано ниже, решит проблему.

[Route("api/file")]
[ApiController]
public class FileController : ControllerBase
{

    public FileController()
    {

    }

    [HttpPost]
    [Produces("application/json")]
    [Consumes("multipart/form-data")]
    public async Task<IActionResult> PostProfilePicture([FromForm]IFormFile file)
    {
        var stream = file.OpenReadStream();
        var name = file.FileName;
        return null;
    }
}

Надеюсь, это решит вашу проблему.

0 голосов
/ 07 февраля 2019

Вам нужно изменить атрибут, который выбирает источник, из которого механизм связывания будет разрешать экземпляр IFormFile.Вместо [FromQuery] до [FromForm]:

public async Task<IActionResult> PostProfilePicture([FromForm]IFormFile file)
...