У меня есть API, и я пытаюсь загрузить изображение. Я пытался использовать чванство и почтальон.
Все, что я возвращаю, это
{
"": [
"The input was not valid."
]
}
Вот как выглядит мой код ->
Контроллер -
[HttpPost("images")]
public async Task<IActionResult> UploadImage(IFormFile file)
{
return await _imageHandler.UploadImage(file);
}
Обработчик изображений -
public interface IImageHandler
{
Task<IActionResult> UploadImage(IFormFile file);
}
public class ImageHandler : IImageHandler
{
private readonly IImageWriter _imageWriter;
public ImageHandler(IImageWriter imageWriter)
{
_imageWriter = imageWriter;
}
public async Task<IActionResult> UploadImage(IFormFile file)
{
var result = await _imageWriter.UploadImage(file);
return new ObjectResult(result);
}
}
И, наконец, автор изображений
public class WriterHelper
{
public enum ImageFormat
{
bmp,
jpeg,
gif,
tiff,
png,
unknown
}
public static ImageFormat GetImageFormat(byte[] bytes)
{
var bmp = Encoding.ASCII.GetBytes("BM"); // BMP
var gif = Encoding.ASCII.GetBytes("GIF"); // GIF
var png = new byte[] { 137, 80, 78, 71 }; // PNG
var tiff = new byte[] { 73, 73, 42 }; // TIFF
var tiff2 = new byte[] { 77, 77, 42 }; // TIFF
var jpeg = new byte[] { 255, 216, 255, 224 }; // jpeg
var jpeg2 = new byte[] { 255, 216, 255, 225 }; // jpeg canon
if (bmp.SequenceEqual(bytes.Take(bmp.Length)))
return ImageFormat.bmp;
if (gif.SequenceEqual(bytes.Take(gif.Length)))
return ImageFormat.gif;
if (png.SequenceEqual(bytes.Take(png.Length)))
return ImageFormat.png;
if (tiff.SequenceEqual(bytes.Take(tiff.Length)))
return ImageFormat.tiff;
if (tiff2.SequenceEqual(bytes.Take(tiff2.Length)))
return ImageFormat.tiff;
if (jpeg.SequenceEqual(bytes.Take(jpeg.Length)))
return ImageFormat.jpeg;
if (jpeg2.SequenceEqual(bytes.Take(jpeg2.Length)))
return ImageFormat.jpeg;
return ImageFormat.unknown;
}
}
Я следовал этому руководству -> https://www.codeproject.com/Articles/1256591/Upload-Image-to-NET-Core-2-1-API
Я уже изменил Swagger в проекте, чтобы иметь возможность загружать файлы, но даже swagger выдает ту же ошибку. У меня нет других ошибок в моем коде, и отладка ничего не делает (пытаюсь установить точки останова в моем контроллере, но, видимо, они не принимают или не должны, все еще учимся здесь).
Любая помощь будет оценена. Спасибо!
Сделал чистый тест, и проблема, похоже, в [ApiController]
. Любая идея, почему/как я могу это исправить?
ApiController
был добавлен в 2.1. В любом случае, я думаю, вы исправите это, если будете следовать инструкциям здесь для установки версии совместимости. - person Kirk Larkin   schedule 27.09.2018