Saya mencoba membuat API unggah file log untuk aplikasi (ASP.NET Core 3.1/C#). Pada dasarnya, file harus dapat diunggah sesuai permintaan ke URL, dan disimpan ke penyimpanan Azure BLOB untuk dilihat nanti.

Saat Menguji dari Tukang Pos, saya mendapatkan hasil yang beragam. Jika saya membiarkan tajuk Tipe Konten apa adanya, saya mendapatkan kesalahan "415 Jenis Media yang Tidak Didukung":

Postman Unsupported Media Type error

enter image description here

Jika saya menghapus centang pada header Content-Type, saya berhasil menekan API, tetapi file log selalu NULL. Setelah membaca banyak posting dengan masalah serupa, saya sudah mencoba dengan dan tanpa [FromForm], [Consumes], dan sejumlah perubahan kecil lainnya, tetapi tidak dapat mengetahuinya.

Saya berasumsi ada sesuatu yang sederhana yang saya lakukan salah atau hilang, tetapi saya kehabisan ide!

Di bawah ini adalah kode untuk titik akhir API saya

        [HttpPost]
        [Consumes("multipart/form-data")]
        [Route("/api/beam/v1/{orgCode}/device/{deviceCode}/log")]
        [Authorize]
        public async Task<IActionResult> PostLogAsync(string orgCode, string deviceCode, [FromForm(Name = "log")] IFormFile log)
        {
            string lvBlobFileName;
            string lvContainerName;

            string strContent = Request.ContentType;

            lvContainerName = _configuration["StorageContainerLogs"];

            BlobContainerClient container = GetCloudBlobContainer(lvContainerName);

            lvBlobFileName = $"{orgCode}/{deviceCode}/{deviceCode}_{DateTime.Now.ToString("yyyyMMddhhmmss")}";
            BlobClient blob = container.GetBlobClient(lvBlobFileName);

            if (log == null)
                return Ok("No files to upload");

            using (Stream reader = log.OpenReadStream())
            {
                await blob.UploadAsync(reader);
            }

            return Ok();
        }

Bantuan apa pun dihargai!

1
brad 12 Mei 2021, 07:12

1 menjawab

Jawaban Terbaik

Sejauh yang saya tahu, jika Anda ingin memposting file yang akan menjadi model otomatis mengikat ke iformfile, Anda harus menggunakan form-data bukan biner.

Lebih jelasnya, Anda bisa merujuk ke pengaturan tukang pos di bawah ini:

enter image description here

Hasil:

enter image description here

1
Brando Zhang 12 Mei 2021, 06:08