ASPNetCore API IFormFile, возвращающий «неверный ввод» - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть API, и я пытаюсь загрузить изображение.Я пытался использовать чванство и почтальон.

Все, что я получаю, это

{
    "": [
        "The input was not valid."
    ]
}

Вот так выглядит мой код ->

Контроллер -

    [HttpPost("images")]
    public async Task<IActionResult> UploadImage(IFormFile file)
    {
        return await _imageHandler.UploadImage(file);
    }

Image Handler -

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 выдает ту же ошибку.У меня нет других ошибок в моем коде, и отладка ничего не делает (пытается установить контрольные точки в моем контроллере, но, видимо, они не берут или не должны, все еще учатся здесь).

Любая помощь будет оценена,Спасибо!

enter image description here

Выполнен чистый тест, и проблема, похоже, в [ApiController].Любая идея, почему / как я могу это исправить?

1 Ответ

0 голосов
/ 27 сентября 2018

Нашел мою проблему и нашел мое исправление.Обнаружив, что моей проблемой был [ApiController], я наткнулся на еще одну проблему, связанную с переполнением стека,

Это решило мою проблему.Изменение services.AddMvc() в -> services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

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