Dziś kod ułatwiający pracę w ASP.NET Core WebAPI.
Poniżej metoda rozszerzająca, która pozwala pobrać zawartość pliku przekazanego w żądaniu:
public static class FormFileExtensions
{
/// <summary>
/// Returns file content as byte array.
/// Returns null if null input provided.
/// </summary>
/// <param name="pgmFile"></param>
/// <returns></returns>
public static byte[] ExtractFileContent(this IFormFile pgmFile)
{
byte[] pgmFileContent = null;
if (pgmFile?.Length > 0)
{
using (var ms = new MemoryStream())
{
pgmFile.CopyTo(ms);
pgmFileContent = ms.ToArray();
}
}
return pgmFileContent;
}
}
Przykład użycia w kontrolerze:
[Route("upload")]
[HttpPost]
public IActionResult UploadFile(IFormFile file)
{
byte[] fileContent = file.ExtractFileContent();
//Przetwarzanie pliku
return Ok();
}
Nie zapominajmy o zagrożeniach wynikających z przyjmowania plików.
Szczególną ostrożność należy zachować, gdy API jest dostępne publicznie, a nie ukryte w wewnętrznej sieci organizacji.
Wskazówki dotyczące bezpieczeństwa podczas obsługi plików można znaleźć tutaj
https://docs.microsoft.com/pl-pl/aspnet/core/mvc/models/file-uploads?view=aspnetcore-5.0
Ogólne wskazówki dotyczące zagadnienia bezpieczeństwa API są dostępne tutaj
https://sekurak.pl/jak-zadbac-o-bezpieczenstwo-api-owasp-api-security-top-ten/