示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#3
0
        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));
        }