public async Task <IActionResult> Create(ControllerModels.Smileys.CreateSmileyInput input) { if (ModelState.IsValid) { var allowedExtensions = new[] { "gif", "png" }; var extension = Path.GetExtension(input.File.FileName).ToLower().Substring(1); if (Regex.IsMatch(input.File.FileName, @"[^a-zA-Z 0-9_\-\.]")) { ModelState.AddModelError("File", "Your filename contains invalid characters."); } if (!allowedExtensions.Contains(extension)) { ModelState.AddModelError("File", $"Your file must be: {string.Join(", ", allowedExtensions)}."); } if (!(await SmileyRepository.FindByCode(input.Code) is null)) { ModelState.AddModelError(nameof(input.Code), "Another smiley exists with that code."); } if (ModelState.IsValid) { var smileyRecord = new DataModels.Smiley { Code = input.Code, Thought = input.Thought, FileName = input.File.FileName }; DbContext.Smileys.Add(smileyRecord); using (var inputStream = input.File.OpenReadStream()) { smileyRecord.Path = await ImageStore.Save(new ImageStoreSaveOptions { ContainerName = Constants.InternalKeys.SmileyImageContainer, FileName = input.File.FileName, ContentType = input.File.ContentType, InputStream = inputStream, Overwrite = true }); } await DbContext.SaveChangesAsync(); TempData[Constants.InternalKeys.StatusMessage] = $"Smiley '{input.File.FileName}' was added with code '{input.Code}'."; var referrer = this.GetReferrer(); return(Redirect(referrer)); } } var viewModel = new ViewModels.CreatePage { Code = input.Code, Thought = input.Thought }; return(View(viewModel)); }
public async Task <ControllerModels.Smileys.CreateResult> Create(ControllerModels.Smileys.CreateSmileyInput input) { var result = new ControllerModels.Smileys.CreateResult(); var allowedExtensions = new[] { "gif", "png" }; var extension = Path.GetExtension(input.File.FileName).ToLower().Substring(1); if (Regex.IsMatch(input.File.FileName, @"[^a-zA-Z 0-9_\-\.]")) { result.Errors.Add("File", "Your filename contains invalid characters."); } if (!allowedExtensions.Contains(extension)) { result.Errors.Add("File", $"Your file must be: {string.Join(", ", allowedExtensions)}."); } if (DbContext.Smileys.Any(s => s.Code == input.Code)) { result.Errors.Add(nameof(input.Code), "Another smiley exists with that code."); } if (!result.Errors.Any()) { var smileyRecord = new DataModels.Smiley { Code = input.Code, Thought = input.Thought, FileName = input.File.FileName }; DbContext.Smileys.Add(smileyRecord); using (var inputStream = input.File.OpenReadStream()) { smileyRecord.Path = await ImageStore.Save(new ImageStoreSaveOptions { ContainerName = Constants.InternalKeys.SmileyImageContainer, FileName = input.File.FileName, ContentType = input.File.ContentType, InputStream = inputStream, Overwrite = true }); } await DbContext.SaveChangesAsync(); } return(result); }
public async Task <IActionResult> Create(ControllerModels.Smileys.CreateSmileyInput input) { if (ModelState.IsValid) { var result = await SmileyRepository.Create(input); ModelState.AddModelErrors(result.Errors); if (ModelState.IsValid) { TempData[Constants.InternalKeys.StatusMessage] = $"Smiley '{input.File.FileName}' was added with code '{input.Code}'."; var referrer = ForumViewResult.GetReferrer(this); return(Redirect(referrer)); } } var viewModel = new ViewModels.CreatePage { Code = input.Code, Thought = input.Thought }; return(await ForumViewResult.ViewResult(this, viewModel)); }