Загрузить файл JSON в WebAPI - PullRequest
2 голосов
/ 14 февраля 2020

Я пытаюсь загрузить файл JSON в. Net Core 3 WebApp, используя Powershell Core, но не могу заставить его работать. «Файл» всегда равен нулю.

Ниже кода из WebApp:

[HttpPost]
public async Task<ActionResult> UploadFile(IFormFile file)
{
    if (!ModelState.IsValid) 
        return BadRequest();

        var path = Path.GetTempFileName();
        var stream = new FileStream(path, FileMode.Create);
        await file.CopyToAsync(stream);
        string FileName = file.FileName;

        // .. parsing the file

        return Ok();
}

И фактический запрос от Powershell:

$file = '/fileToUpload.json'
Invoke-RestMethod -Uri 'https://localhost:5001/uploadfile' -Method Post -InFile $file -ContentType 'application/json'

Но этот запрос всегда возвращает следующую ошибку:

Invoke-RestMethod : System.NullReferenceException: Object reference not set to an instance of an object.

И при установке точки останова в методе я вижу, что «файл» всегда равен нулю.

Изначально я начал с метода, который принимает JSON данных в теле, но, похоже, в теле запроса Post есть какое-то ограничение при использовании Invoke-RestMethod, поэтому мне пришлось придумать другое решение, чтобы обойти этот «предел». Я не сталкиваюсь с проблемой ограничения при использовании Postman, поэтому, я думаю, это связано с Powershell. В случае, если кто-то знает, как решить эту проблему «ограничения в теле», это было бы еще больше, поскольку я предпочитаю публиковать данные JSON в теле, а не публиковать файл.

Надеюсь, кто-то может мне помочь. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Хорошо, мне удалось решить мою начальную проблему: кажущееся ограничение полезной нагрузки тела в запросе POST при использовании команды Invoke-RestMethod cmd-let. Я переключился с помощью curl, и теперь все работает, как и ожидалось, поэтому мне не нужно публиковать файл вместо JSON данных (которые, кажется, теперь также работают нормально).

Вот команда curl I используется для всего, что может столкнуться с той же проблемой:

curl --url 'https://localhost:5001/postJSON' --insecure -H 'Content-Type: application/json' --request POST --data @fileToUpload.json
0 голосов
/ 14 февраля 2020

Не следует использовать приложение -ContentType '/ json для загрузки файлов. См. Пример 4: Упрощенная отправка данных из нескольких частей / форм

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...