C# 如何仅验证使用asp.net web api上载的图像?

C# 如何仅验证使用asp.net web api上载的图像?,c#,image,validation,asp.net-web-api,azure-storage-blobs,C#,Image,Validation,Asp.net Web Api,Azure Storage Blobs,我一直在使用asp.net web api将图像上载到azure blob存储。代码控制器代码如下所示,是我在网上搜索时发现的(不记得刚才在哪里)。不管怎样,这很有效。但是,由于其他文件,而不是图像可以上传到azure,我想一种方法来检查文件是否也是图像。我见过其他人询问这个问题,但无法使用下面的代码实现它 问题 如何使用下面的代码验证文件是否为图像?如果可能,验证这一点的最佳实践/最安全的方法是什么?感谢您的帮助或意见 编辑 用我试图实现的代码进行了更新,但不起作用 [HttpPost

我一直在使用asp.net web api将图像上载到azure blob存储。代码控制器代码如下所示,是我在网上搜索时发现的(不记得刚才在哪里)。不管怎样,这很有效。但是,由于其他文件,而不是图像可以上传到azure,我想一种方法来检查文件是否也是图像。我见过其他人询问这个问题,但无法使用下面的代码实现它

问题

如何使用下面的代码验证文件是否为图像?如果可能,验证这一点的最佳实践/最安全的方法是什么?感谢您的帮助或意见

编辑

用我试图实现的代码进行了更新,但不起作用

    [HttpPost]
    [Route("api/uploadImage")]
    [ResponseType(typeof(List<BlobUploadModel>))]
    public async Task<IHttpActionResult> PostBlobUpload()
    {
        try
        {
            // This endpoint only supports multipart form data
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                return StatusCode(HttpStatusCode.UnsupportedMediaType);
            }

            //Added this code to convert to Byte and check if it is a image
            Byte[] byteArray = await Request.Content.ReadAsByteArrayAsync();
            bool isvalidImage = IsValidImage(byteArray);

            if (isvalidImage == false)
            {
                return BadRequest();
            }


            // Call service to perform upload, then check result to return as content
            var result = await _service.UploadBlobs(Request.Content);
            if (result != null && result.Count > 0)
            {
                return Ok(result);
            }

            // Otherwise
            return BadRequest();
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }



    //Method that is being called to validate if image
     public static bool IsValidImage(byte[] bytes)
    {
        try
        {
            using (MemoryStream ms = new MemoryStream(bytes))
                Image.FromStream(ms);
        }
        catch (ArgumentException)
        {
            return false;
        }
        return true;
    }
[HttpPost]
[路由(“api/上传图像”)]
[响应类型(类型(列表))]
公共异步任务PostBlobUpload()
{
尝试
{
//此端点仅支持多部分表单数据
if(!Request.Content.IsMimeMultipartContent(“表单数据”))
{
返回状态码(HttpStatusCode.UnsupportedMediaType);
}
//添加此代码以转换为字节并检查它是否为图像
Byte[]byteArray=等待请求.Content.ReadAsByteArrayAsync();
bool isvalidImage=isvalidImage(byteArray);
如果(isvalidImage==false)
{
返回请求();
}
//调用服务执行上载,然后检查结果以作为内容返回
var result=wait_service.UploadBlobs(Request.Content);
if(result!=null&&result.Count>0)
{
返回Ok(结果);
}
//否则
返回请求();
}
捕获(例外情况除外)
{
返回InternalServerError(ex);
}
}
//方法,该方法被调用以验证图像是否正确
公共静态bool IsValidImage(字节[]字节)
{
尝试
{
使用(MemoryStream ms=新的MemoryStream(字节))
Image.FromStream(ms);
}
捕获(异常)
{
返回false;
}
返回true;
}

您必须添加验证,如下面链接中所建议的,以检查收到的ByteArray,否则返回
BadRequest

您认为您可以在我添加的代码中帮助实现该解决方案吗。我是一个初学者,不知道如何一起使用它们,谢谢链接!你们在请求中收到了什么。内容,你们能调试和检查吗?我想我找到了一种方法来做到这一点,不确定最佳实践是否正确。我添加了代码字节[]byteArray=wait Request.Content.ReadAsByteArrayAsync();这样,我就可以用您共享的链接中的代码检查byteArray。考虑到您对最佳实践的评论,我想说处理服务器端的带宽开销-我看不到任何其他问题。@mattias:一旦您达到目标,请更新您的代码。这会很有帮助的,谢谢