c# - ASPNetCore API IFormFile 返回“无效输入”
问题描述
我有一个 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] 之后,我偶然发现了另一个与此相关的 stackoverflow 问题。
这解决了我的问题。修改services.AddMvc()
为 ->services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
推荐阅读
- docker - Docker 安装版本
- android - Room 无法验证数据完整性。看起来您已更改架构但忘记更新版本号
- web-component - 拥有许多 Shadow DOM 对浏览器性能是好是坏?
- json - 如何在 Avro Schema 中同时将类型设置为“记录”和“空”?
- python - 使用 BeautifulSoup 删除 HTML 中多余的类名
- java - 将 Point 对象作为参数并根据它是否在直线段内返回 true 或 false 的方法
- hadoop - 远程异常(org.apache.hadoop.ipc.StandbyException)
- azure - .Net Core 中 ServiceBus MessagingFactory 的替代品是什么?
- php - 循环如何在 PHP 中的 FPDF 中使用换行符?
- google-sheets - 在 Google 表格中,为什么 rank() 会以不同的方式处理两个相同的值?