public async Task <IActionResult> Post([FromForm] TemplateToken token) { using (Stream stream = token.File.OpenReadStream()) using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Read)) { if (archive.GetEntry("main.tex") == null) { return(BadRequest("main.tex file missing")); } Template template; try { template = Database.AddTemplate(token, null); } catch (Exception ex) { return(BadRequest(ex.Message)); } try { var path = Templates.CreateDirectory(template); foreach (var entry in archive.Entries) { entry.ExtractToFile(Path.Combine(path, entry.FullName)); } } catch (Exception ex) { Templates.RemoveTemplate(template); Database.Templates.Remove(template); return(BadRequest(ex.Message)); } return(Ok(template)); } }