415 UnsupportedMediaType при попытке перехватить запрос POST

Мой поставщик каналов отправляет мне файл .gz (zip-файл) по запросу POST на мой сервер.

Я пытаюсь реализовать код .NET, который будет перехватывать запрос POST и разархивировать файл, чтобы открыть файл внутри.

Я просто пытаюсь перехватить запрос POST и распаковать содержимое, сделав это:

namespace app.Controllers
{
    [Route("")]
    public class FeedController : Controller
    {
        [HttpPost]
        public string Post([FromBody] string content)
        {
            return content;
        }
    }
}

он возвращает 415 UnsupportedMediaType.

Как перехватить POST-запрос, который является ZIP-файлом, и как распаковать его, чтобы вернуть файл внутри?

благодарю вас.

Редактировать :

[HttpPost]
        [Consumes("multipart/form-data")]
        public IActionResult Post(IFormFile file)
        {
            if (file == null)
                return BadRequest();

            try
            {
                using (var zip = new ZipArchive(file.OpenReadStream()))
                {
                    // do stuff with the zip file
                }
            }
            catch
            {
                return BadRequest();
            }

            return Ok();
        }

person amin89    schedule 09.12.2019    source источник
comment
[FromBody] string content мне кажется неправильным: я не думаю, что это будет строковый параметр. Я полагаю, вам нужен HttpPostedFileBase, но я не знаю подробностей.   -  person Rup    schedule 10.12.2019
comment
Я знаю, что это неправильно, но как я могу знать, что почтовый запрос представляет собой ZIP-файл? как я могу распаковать zip-файл?   -  person amin89    schedule 10.12.2019
comment
Я все еще думаю, что вам нужен HttpPostedFileBase. Если это файл .gz, вы можете извлечь его с помощью GzipStream. Если это файл .zip, вы можете использовать ZipArchive, который также будет работать с потоками, или SharpZipLib.   -  person Rup    schedule 10.12.2019
comment
да, это файл .gz. Я отредактировал свой вопрос. Не могли бы вы дать мне реализацию GzipStream на основе моего кода? Я новичок в лечении таких вещей. Благодарю.   -  person amin89    schedule 10.12.2019


Ответы (2)


Часть проблемы решена.

Чтобы прочитать файл .gz, отправленный запросом POST, вы должны сделать следующее:

[HttpPost]
        [Consumes("application/gzip")]
        public IActionResult Post(IFormFile file)
        {

                WebClient Client = new WebClient();
                Client.DownloadFile("http://xxxxxx.com/feed.gz", "C:\\temp\\mygzipfile.gz");
                // do something with this file
            return Ok();
        }
person amin89    schedule 11.12.2019